Я пытаюсь отредактировать тему, в которой много сообщений. Редактировать страницу для темы имеет name
и Post's content
, которые можно редактировать.рельсы: ошибка массового присвоения, вызванная обновлением дочернего элемента (post) от родительского (Тема) контроллера (вид редактирования)
Ошибка массового присваивания происходит в topic_controller.rb, update
метод, post.update_attributes(params[:post])
.
Как избежать ошибки массового присвоения.
topic.rb
class Topic < ActiveRecord::Base
has_many :posts, :dependent => :destroy
belongs_to :forum
accepts_nested_attributes_for :posts, :allow_destroy => true
attr_accessible :name, :last_post_id, :posts_attributes
end
post.rb
class Post < ActiveRecord::Base
belongs_to :topic
attr_accessible :content
end
topics_controller.rb
def update
@topic = Topic.find(params[:id])
post = @topic.posts.first
if @topic.update_attributes(params[:topic]) && post.update_attributes(params[:post])
topic = Topic.find(@post.topic_id)
flash[:success] = "Success!"
redirect_to topic_posts_path(topic)
else
render 'edit'
end
end
просмотров/темы/edit.html.erb
<%= form_for @topic do |f| %>
<!-- render 'shared/error_messages_topic' -->
<%= f.label :name %>
<%= f.text_field :name %>
<%= f.fields_for @topic.posts.first do |post| %>
<%= render :partial => "posts/form", :locals => {:f => post} %>
<% end %>
<%= f.submit "Edit", class: "btn btn-large btn-primary" %>
<% end %>
просмотров/сообщений/_form.html.erb
<%= f.label :content %>
<%= f.text_area :content %>
'<% = f.fields_for: сообщения, @ topic.posts.first сделать | запись | %> 'Это потрясающий трюк. Спасибо. –