为什么Rails不自动创建连接表条目?

时间:2010-09-11 18:43:48

标签: ruby-on-rails activerecord

我有一个简单的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它指出当你执行这样的赋值时,会创建新的关联,如果有些关联,它们将会被删除。

我在这里做错了什么想法?

1 个答案:

答案 0 :(得分:4)

Rails假设模型类以单数形式命名,即类ProfileTags应该被称为ProfileTag

根据您使用的Rails版本,可能最简单的解决方法是使用Rails 2.x或script/destroy中的script/generaterails destroy重新创建模型。 Rails 3中的rails generate

或者,通过将:class_name => 'ProfileTags'添加到has_many声明来手动指定类名也应该有用。