2012-07-23 15 views
5

Próbowałem utworzyć i edytować obiekt przy użyciu widoku modalnego w indeksie html w Railsach. Używam twitter bootstrap w projekcie. Do tej pory udało mi się stworzyć obiekt za pomocą modalu. Aby wszystko działało, musiałem utworzyć obiekt o nazwie @post = Post.new w akcji indeksu.Tworzenie i edycja obiektu przy użyciu modalu w szynach

Ponieważ przed wyświetleniem modul edycji, obiekt edycji musi być gotowy jako @post = Post.find (parametry [: id]), ale dzieje się tak w akcji edycji.

Czy sposób, w jaki mogę zainicjować @post dla mojego widoku modalnego edycji, zanim zostanie wyświetlony?

Oto mój kod:

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

Możesz uzyskać bardziej pomocne odpowiedzi, publikując fragmenty kodu –

+0

Zaktualizowane pytanie z fragmentami kodu – random

+0

@random wymyśliłeś to? –

Odpowiedz

0

Dopóki rozumiem, że chcesz użyć zmiennej instancji @post w widoku modalnym edycji.

Nie znając swoją bazę kodu, co mogę powiedzieć:

  1. Znajdź odpowiednie działania w kontrolerze, który powoduje, że Edycja Widok modalne, utwórz je, jeśli nie ma
  2. Inicjalizacja @post z modelem sprzedaży znalezione przez ID, po prostu skopiuj i wklej to do prawidłowego działania
  3. Nazwać zakresem widoku

nadzieję, że odpowiedzi na swoje pytanie

+0

Ponieważ modalny jest wyświetlany w indeksie html, myślę, że @post należy zdefiniować w akcji indeksu. Ale kiedy klikam przycisk nowy lub edytuj, wywoływane są odpowiednie akcje. – random

+0

Renderuj '<% = render: partial => 'formularz'%>' w widoku indeksu, gdzie chciałbyś zobaczyć swój formularz do tworzenia obiektów. –

+0

To nie pomogło. jakieś inne sugestie? – random

Powiązane problemy