我有一个简单的has_many通过关系设置:
class Tag < ActiveRecord::Base
has_many :profile_tags
has_many :profiles, :through => :profile_tags
end
class ProfileTags < ActiveRecord::Base
belongs_to :profile
belongs_to :tag
end
class Profile < ActiveRecord::Base
has_many :profile_tags
has_many :tags, :through => :profile_tags
end
从我的观点来看,我接受一组标签(只是字符串),并在我的控制器中迭代它们并在每个标签上调用Tag.create(...),然后将它们推入一个数组。一切正常。
所以我得到了一个点,我有一个Tag对象(标签)数组,每个对象都是由create调用返回的,而变量@profile是通过执行Profile.new创建的
我想这样做:@profile.tags = tags
这样做会在我尝试分配的行上导致此错误:
uninitialized constant Profile::ProfileTag
Rails就像我需要手动创建和分配连接表关联一样,即使这里http://guides.rubyonrails.org/association_basics.html#the-has_many-through-association它指出当你执行这样的赋值时,会创建新的关联,如果有些关联,它们将会被删除。
我在这里做错了什么想法?
答案 0 :(得分:4)
Rails假设模型类以单数形式命名,即类ProfileTags
应该被称为ProfileTag
。
根据您使用的Rails版本,可能最简单的解决方法是使用Rails 2.x或script/destroy
中的script/generate
和rails destroy
重新创建模型。 Rails 3中的rails generate
。
或者,通过将:class_name => 'ProfileTags'
添加到has_many
声明来手动指定类名也应该有用。