Я хочу создать форму комментария внизу записи в блоге.Проблема в том, что он не сохраняет blog_id, поэтому при создании комментария ему не назначается blog_id.Я думал, что с этой строкой:
@new_comment = @blog.comments.build(params[:comment])
, что это будет работать, но это не так.Вот что у меня есть:
blog # show
def show
@blog = Blog.find(params[:id])
@new_comment = @blog.comments.build(params[:comment])
end
blog # form
...
<%= 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)
Все отлично работает, но теперь после того, как я отправляю комментарий, комментарий появляется дважды.Он отображается в разделе комментариев, где он должен, и также отображается в виде предварительно заполненной формы комментариев поверх новой формы комментариев.Таким образом, вы видите содержимое блога, предварительно заполненную форму комментария, которую я только что отправил, новую форму комментариев и комментарий в разделе комментариев к отображению.
Я не знаю, что это такое.