在我的服务器上,我有两个模型:
广播
class Broadcast < ActiveRecord::Base
validates_presence_of :content
belongs_to :user
has_and_belongs_to_many :feeds
attr_accessible :content, :feeds, :feeds_attributes
end
饲料
class Feed < ActiveRecord::Base
has_and_belongs_to_many :broadcasts
attr_accessible :name
end
在我的客户端上,我有这些模型的基本 ActiveResource 类。
当我尝试使用给定的源(来自客户端)创建新的广播时:
feed = Feed.find(3) <-succesful
broadcast = Broadcast.new
broadcast.attributes['feed'] ||= []
broadcast.feed << feed
broadcast.save
在服务器上的广播控制器中,我只需做
@broadcast = Broadcast.new(params[:broadcast])
它给出以下错误:
ActiveRecord::AssociationTypeMismatch (Feed(#45931224) expect, get ActiveSupport::HashWithIndifferentAccess(#25685616)):
我试过改变
broadcast.attributes['feed'] ||= []
自
broadcast.attributes['feed_attributes'] ||= []
但它给了我"未知属性错误"
关系,我错过了:
accepts_nested_attributes_for :feeds
在我的广播方法中。
无论如何,如果有人遇到这个问题,请注意:
broadcast.attributes['feed_attributes'] ||= []
是正确的,如果没有"_attributes"后缀,仍然会发生HashWithIndifferentAccess错误。