2012-07-23 20 views
5

He intentado crear y editar un objeto utilizando una vista modal en el html de índice en Rails. Estoy usando Twitter bootstrap en el proyecto. Tengo mucho éxito al crear el objeto usando el modal. Para que las cosas funcionen, tuve que crear un objeto llamado @post = Post.new en mi acción de índice.Crear y editar objetos usando modal en rieles

Desde antes de que se muestre el modal de edición, el objeto de edición debe estar listo como @post = Post.find (params [: id]), pero ocurre en la acción de edición.

¿Es su manera de utilizar inicializar @post para mi vista modal de edición antes de que se muestre?

Aquí está mi código:

index.html.erb

<div class="page-header"> 
    <h1>Posts</h1> 
</div> 


<% @posts do |post| %> 
    <tr> 
    <td><%= post.name %></td> 
    <td><%= post.description %></td> 

    <td><%= link_to 'Edit', edit_post_path(post), :class => 'btn btn-mini btn-min-standard-width', :data => {:toggle => "modal", :target => "#editItemModal"} , :remote => true %> 
     <%= link_to 'Destroy', post, confirm: 'Are you sure?', method: :delete, :class => 'btn btn-mini btn-danger btn-min-standard-width' %></td> 
    </tr> 
<% end %> 


<%= link_to 'New Item', new_post_path, 
     :class => 'btn btn-primary btn-standard-width' , :data => {:toggle => "modal", :target => "#newItemModal"} , :remote => true %> 





<div id="newItemModal" class="modal hide fade" > 
    <button type="button" class="close" data-dismiss="modal">×</button></h1> 
    <div class="page-header"> 
     <h1>New item </h1> 
    </div> 

    <%= render :partial => 'form' %> 
</div> 


<div id="editItemModal" class="modal hide fade" > 
    <button type="button" class="close" data-dismiss="modal">×</button></h1> 
    <div class="page-header"> 
     <h1>Edit item </h1> 
    </div> 

    <%= render :partial => 'form' %> 
</div> 

_form.html.erb

<%if @post%> 

    <%= form_for(@post, :html => { :class => 'form-horizontal', :remote => true }) do |f| %> 


    <div class="control-group"> 
     <%= f.label :name, :class => 'control-label' %> 
     <div class="controls"> 
      <%= f.text_field :name %> 
     </div> 
    </div> 
    <div class="control-group"> 
     <%= f.label :description, :class => 'control-label' %> 
     <div class="controls"> 
      <%= f.text_area :description %> 
     </div> 
    </div> 


    <div class="form-actions"> 
     <%= f.submit nil, :class => 'btn btn-primary' %> 
    </div> 


    <% end %> 
<% end %> 

PostController

class PostsController < ApplicationController 

def index 
    @post = Post.new 
    @posts = Post.all 

    respond_to do |format| 
     format.html # index.html.erb 
     format.json { render json: @posts } 
    end 
    end 

def show 
    @post = Post.find(params[:id]) 

    respond_to do |format| 
     format.html # show.html.erb 
     format.json { render json: @post } 
    end 
    end 

def new 
    @post = Post.new 
end 

    def edit 
    @post = Post.find(params[:id]) 
    respond_to do |format| 
     format.html 
    format.json { render json: @post } 
    end 
    end 

...... ......

+0

Puede obtener más respuestas útiles mediante la publicación de bits del código –

+0

Pregunta actualizada con fragmentos de código – random

+0

@random ¿Lo resolvió? –

Respuesta

0

Siempre que entienda que desea utilizar la variable de instancia @post en la vista modal de edición.

Sin conocer su base de código, lo que puedo decir:

  1. Encuentra la acción correspondiente en el controlador que representa la vista modal editar, crear uno si no hay
  2. Inicializar @post con el modelo cargo se encontró por id, simplemente copia y pega esto en la acción apropiada
  3. Llámelo dentro de la vista alcance

esperanza de que responda a su pregunta

+0

Como modal se muestra dentro del html de índice, creo que @post debe definirse dentro de la acción de índice. Pero cuando hago clic en el botón nuevo o editar, se invocan las acciones correspondientes. – random

+0

Render '<% = render: partial => 'formulario'%>' en su vista de índice, donde le gustaría ver su formulario para la creación de objetos. –

+0

No sirvió de nada. ¿cualquier otra sugerencia? – random

Cuestiones relacionadas