我想在博客條目的底部創建評論表單。問題在於,在評論創建時它不保存blog_id,因此未分配blog_id。我以爲有這條線:rails嵌套屬性
@new_comment = @blog.comments.build(params[:comment])
它會工作,但它沒有。這是我有:
博客#顯示
def show
@blog = Blog.find(params[:id])
@new_comment = @blog.comments.build(params[:comment])
end
博客#形式
...
<%= semantic_form_for @new_comment do |f| %>
<%= f.input :name %>
<%= f.input :content, :label => "Comment", :input_html => { :rows => 6, :class => "xxlarge" } %>
<div class="pull-right"><%= f.commit_button :button_html => {:class => "primary"}, :label => "Submit" %></div>
<% end %>
blog.rb
accepts_nested_attributes_for :comments
評論控制器
def create
@comment = @blog.comments.build(params[:comment])
if @comment.save
redirect_back_or show_blog_path(@blog)
else
redirect_to show_blog_path(@blog)
end
end
編輯:
我做嵌套在@blog內形式:
<%= semantic_form_for @blog do |f| %>
<%= f.semantic_fields_for :comments do |ff| %>
<%= ff.input :name %>
<%= ff.input :content, :label => "Comment", :input_html => { :rows => 6, :class => "xxlarge" } %>
<% end %>
<div class="pull-right"><%= f.commit_button :button_html => {:class => "primary"}, :label => "Submit" %></div>
<% end %>
,改變了博客#展現給:
@blog = Blog.find(params[:id])
@blog.comments.build
@comments = Comment.where(:blog_id => @blog.id)
一切工作正常,但現在經過我提交評論,評論顯示兩次。它顯示在它應該在的評論部分,並且它也顯示爲新的評論表單上的預先填充的評論表單。因此,您可以看到博客的內容,我剛剛提交的預填充評論表單,新評論表單以及顯示評論部分中的評論。
我不知道它是什麼。
我不想添加隱藏字段。我按照習慣的方式嵌套了表單。 (不知道我做這件事的方式和你做事的方式有什麼不同)。但看到我的編輯上面的新問題。謝謝。 – noob 2012-02-13 05:50:43
預先填充的評論表單歸因於@comments變量。 'semantic_fields_for'本質上是對所有評論(即博客的現有評論和由@ blog.comments.build行實例化的新評論)進行循環並在表單中顯示每個評論。 – prasvin 2012-02-13 07:55:56
p.s. :上述(編輯後)是否正常工作?該表單具有semantic_form_for「@ blog」,並且它接受每個評論的嵌套屬性,現在提交的表單如何創建評論控制器的操作。該表單現在充當'@ blog'的編輯表單,因此提交更新博客控制器的操作。 這就是創建評論的地方(或者由於它接受它們的嵌套屬性,因此正在更新博客從而創建評論)。 – prasvin 2012-02-13 08:04:12