不能批量分配受保护的属性
需要一些关于我的rails应用程序中的一些关联的帮助。得到一个“不能批量分配受保护的属性:rss_readers”的警告,并没有找出问题所在。不能批量分配受保护的属性
class Scraper < ActiveRecord::Base
attr_accessible :name, :link, :rss_reader_attributes
has_one :rss_reader
accepts_nested_attributes_for :rss_reader
而且accociation:
class RssReader < ActiveRecord::Base
attr_accessible :title, :address, :content
belongs_to :scraper
在轨安慰其工作正常。
> scraper = Scraper.new
> scraper.build_rss_reader
> scraper.attributes={:rss_reader_attributes=>{:address => "asdsad"}}
但在控制器中,我得到了警告。
def new
@scraper = Scraper.new
@scraper.build_rss_reader
end
def create
@scraper = Scraper.new(params[:scraper])
@scraper.build_rss_reader
if @scraper.save
redirect_to :show
else
render :new
end
并且那是新的视图
<%= form_for(@scraper) do |f| %>
<div class="field">
<%= f.label :name %><br />
<%= f.text_field :name %>
</div>
<%= f.fields_for(@scraper.rss_reader) do |rss| %>
<div class="field">
<%= rss.label :address %><br />
<%= rss.text_field :address %>
</div>
<% end %>
<div class="actions">
<%= f.submit "Submit" %>
</div>
<% end %>
我那吼声是所有正确的,但我得到的警告。任何人有想法?
感谢
基本上,当你说某些属性可访问,那么你不能质量分配该特定的属性...所以你得到的错误是正确的。 你不能做object.update_attributes
what you can try is do
@rssreader = rssreader.new
@rssreader.address = 'the address'
and then
@scrapper.rssreader = @rssreader
请参阅本关于attr_accessible Rails mass assignment definition and attr_accessible use
感谢您的回应。所以我想我会理解质量分配技术,所以这就是为什么我将rss_reader_attributes添加到父模型。因为我想创建一个刮板对象和一个子对象,嵌套对象RSS阅读器的形式。我认为必须有一种方法来创建与rss_reader协调的刮板并编写嵌套属性。顺便说一下,我的英语不太好,我希望我表达自己的理解。 – mibo 2012-02-16 19:32:18
是啊,明白了。我的错误不在控制器或模型中。在我的新视图中,我必须在字段field_for中使用:rss_reader而不是@ scraper.rss_reader。但我不明白为什么或在哪里创建? – mibo 2012-02-16 19:44:01
一个更好的主意并没有工作。我将rss_reader添加到:attr_accessible。得到这个错误。 RssReader(#70085183525060)预计,得到ActiveSupport :: HashWithIndifferentAccess(#9179800) – mibo 2012-02-16 11:05:28