Решение состоит в том, чтобы ваш блог accept_nested_attributes_for: comments.
Изменяя комментарии только через контроллер блога, вы гарантируете, что вернетесь к просмотру блога с проверками, если что-то пойдет не так.
Изменения, которые нужно внести, чтобы он заработал.
class Blog < ActiveRecord::Base
...
accepts_nested_attributes_for :comments
end
Просмотр блога / шоу
<% form_for @blog do |f| -%>
<%= f.error_messages %>
<% new_comments @blog.comments.select{&:new_record?} %>
<%= f.fields_for :comments, new_comments.empty? ? @blog.comments.build : new_comments do |c| %>
<%= c.label :message, "Add your message" %>
<%= c.text_area :message %>
<%=end%>
<%= f.submit "Submit" %>
<% end -%>
Если в вашем контроллере блога нет метода обновления, вам нужно добавить его, чтобы он работал. Но я полагаю, что это не обязательно для спокойных маршрутов, поскольку рельсы предпримут совместные действия. Однако для этого также может потребоваться представление редактирования блога, практически идентичное представлению представления. Вместо этого используйте этот код в вашем контроллере.
class BlogsController < ApplicationController
def update
@blog = Blog.find(params[:id])
if @blog.update_attributes(params[:blog])
redirect_to @blog
else
render :action => show
end
end
end
Если вы используете attr_accessible для модели блога, вам необходимо добавить: комментарии к списку.