2

マルチモデル フォームとマルチモデル ディスプレイを構築する方法については、多くの例が見つかりました。しかし、フォームとディスプレイを別々にしたい場合はどうすればよいでしょうか?

post.rb:

class Post < ActiveRecord::Bas
  has_many :comments, dependent: :destroy
  attr_accessible :comments_attributes
  accepts_nested_attributes_for :comments
end

コメント.rb:

class Comment < ActiveRecord::Base
  belongs_to :post
end

posts_controller.rb:

def new
  @post = Post.new
  @post.comments.build
  ...
end

ルート.db:

resources posts do
  resources comments
end

投稿インデックスに投稿コメント インデックスへのリンクがあります。

ビュー/投稿/index.html.erb:

...
<%= link_to 'Comments', post_comments_path(post) %>
...

投稿とコメントには、それぞれ独自のスキャフォールド生成フォームがあります (ネストされていません)。

<%= form_for(@post) do |f| %>
...

<%= form_for(@comment) do |f| %>
...

コメント インデックスでは、投稿コメントをループします。

ビュー/コメント/index.html.erb:

<% @post = Post.find(params[:post_id]) %>  //works fine  
<% @post.comments.each do |comment| %>
...
<% end %>

しかし、(特定の投稿 ID の下に) 新しいコメントを追加した後、投稿コメント インデックスのテーブルは空です!

助けてください。ありがとう :)

4

1 に答える 1

1

私はそれを考え出した。

コメントフォームでは、次のようにする必要があります。

<%= form_for([@post, @comment]) do |f| %>
...

パスは次のように使用する必要があります。

post_comments_path(@post)
edit_post_comment_path(@post,@comment)

コメント コントローラーで:

def index
    @post= Post.find(params[:post_id])
    @comments= @post.comments.all
...

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

他の人がこれが役に立つことを願っています!

于 2012-11-28T10:04:53.147 に答える