5

Railsのインデックスhtmlでモーダルビューを使用してオブジェクトを作成および編集しようとしています。プロジェクトで Twitter ブートストラップを使用しています。これまでのところ、モーダルを使用してオブジェクトを作成することに成功しています。機能させるには、index アクションで @post = Post.new というオブジェクトを作成する必要がありました。

編集モーダルが表示される前に、編集オブジェクトが @post = Post.find(params[:id]) として準備されている必要があるため、編集アクションで発生します。

編集モーダル ビューが表示される前に @post を初期化する方法はありますか?

これが私のコードです:

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 %>

ポストコントローラー

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

…………

4

1 に答える 1

0

私が理解している限り、編集モーダル ビューでインスタンス変数 @post を使用したいと考えています。

あなたのコードベースを知らなくても、私は何を言うことができますか:

  1. 編集モーダル ビューをレンダリングするコントローラーで対応するアクションを見つけ、存在しない場合は作成します。
  2. ID で見つかったモデル Post で @post を初期化します。それをコピーして適切なアクションに貼り付けるだけです。
  3. ビュースコープ内で呼び出す

それがあなたの質問に答えることを願っています

于 2012-07-23T05:38:00.727 に答える