2012-02-15 3 views
0

нужна помощь с некоторыми ассоциациями в моем приложении 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 %> 

Я thougth, что все в порядке, но я получаю предупреждение. У кого-нибудь есть идея?

Благодаря

ответ

1

основе this вам может понадобиться явно добавить RssReader к :attr_accessible.

+1

это не сработало. i add: rss_reader: attr_accessible. получите эту ошибку. RssReader (# 70085183525060) ожидается, получил ActiveSupport :: HashWithIndifferentAccess (# 9179800) – mibo

1

В основном, если вы говорите что-то, чтобы быть доступным атрибутом, тогда вы не можете массово назначить этот конкретный атрибут ... так что ошибка, которую вы получаете, прав. Вы не можете сделать 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 accociation и написать вложенные атрибуты. кстати, мой английский не так хорош, я надеюсь, что я выскажу себя, чтобы понять. – mibo

+0

да, да. моя ошибка не была в контроллере или модели. Я должен использовать символ rss_reader вместо @ scraper.rss_reader в поле field_for для моего нового представления. но я точно не понимаю, почему и где он создается? – mibo