不能批量分配受保护的属性

问题描述:

需要一些关于我的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 %> 

我那吼声是所有正确的,但我得到的警告。任何人有想法?

感谢

基于this,您可能需要显式地添加到RssReader:attr_accessible

+1

一个更好的主意并没有工作。我将rss_reader添加到:attr_accessible。得到这个错误。 RssReader(#70085183525060)预计,得到ActiveSupport :: HashWithIndifferentAccess(#9179800) – mibo 2012-02-16 11:05:28

基本上,当你说某些属性可访问,那么你不能质量分配该特定的属性...所以你得到的错误是正确的。 你不能做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

+0

感谢您的回应。所以我想我会理解质量分配技术,所以这就是为什么我将rss_reader_attributes添加到父模型。因为我想创建一个刮板对象和一个子对象,嵌套对象RSS阅读器的形式。我认为必须有一种方法来创建与rss_reader协调的刮板并编写嵌套属性。顺便说一下,我的英语不太好,我希望我表达自己的理解。 – mibo 2012-02-16 19:32:18

+0

是啊,明白了。我的错误不在控制器或模型中。在我的新视图中,我必须在字段field_for中使用:rss_reader而不是@ scraper.rss_reader。但我不明白为什么或在哪里创建? – mibo 2012-02-16 19:44:01