因此,我为项目的一部分设置了命名空间。
class Namespace::Product < ActiveRecord::Base
belongs_to: :namespace_category, class_name: 'Namespace::Category'
...
end
class Namespace::Category < ActiveRecord::Base
has_many :products, :class_name => 'Namespace::Product'
...
end
Product的迁移看起来像
create_table :namespace_products do |t|
t.belongs_to :namespace_category, index: true
...
end
所以,当我这样做时
p = Namespace::Product.create(some_params)
c = Namespace::Category.find(id)
c.products << p
它引发了一个错误,说ActiveModel::MissingAttributeError: can't write unknown attribute 'category_id'
,但我有一个属性
t.integer "namespace_category_id"
在我的schema.rb
中,这是由迁移创建的。
答案 0 :(得分:0)
好的,我只需要在foreign_key
中定义has_many :products
关联时指定Namespace::Category
,感谢Max
答案 1 :(得分:0)
我只会从关联中省略命名空间:
<link rel="icon" type="image/png" href=favicon.ico>
class Namespace::Product < ActiveRecord::Base
belongs_to :category, class_name: 'Namespace::Category'
...
end
class Namespace::Category < ActiveRecord::Base
has_many :products, class_name: 'Namespace::Product'
...
end
答案 2 :(得分:0)
对于Rails 5+上的所有人,如果您不希望它们出现在关联中,也可以在迁移级别指定名称空间:
def change
create_table :namespace_products do |t|
t.references :category, foreign_key: { to_table: :namespace_categories }
end
end
# or
def change
add_reference :namespace_products, :category, foreign_key: { to_table: :namespace_categories }
end
class Namespace::Product < ActiveRecord::Base
belongs_to :category
end
class Namespace::Category < ActiveRecord::Base
has_many :products
end