我有两种型号的Item和User。Item由User创建和拥有。但是Item的用户也不是它的所有者。
似乎我需要很多到许多项目和用户之间的关系。此外,我还需要一个拥有许多项目的用户的一对多的所有权关系。
class User < ActiveRecord::Base
has_many :items, dependent: :destroy
has_and_belongs_to_many :items
end
class Item < ActiveRecord::Base
belongs_to :user
has_and_belongs_to_many :users
end我把我的迁徙安排成这样。
用于保存用户和项之间的许多连接的表。
create_table :items_users, :id => false do |t|
t.column :item_id, :integer
t.column :user_id, :integer
end以及Item由User拥有的所有权。
add_reference :items, :user, index: true
add_foreign_key :items, :users这意味着我可以使用Item访问item.user_id的所有者。我还可以使用item.users和user.items访问许多用户和项目的关系。
我不知道如何通过User对象访问User拥有的项。User拥有的项目应该与user.items的许多关系中的项目不同。
我觉得我把一切都搞错了。我对rails非常陌生,我很困惑。在rails中实现这一点的正确方法是什么?
发布于 2015-04-27 20:36:48
class User < ActiveRecord::Base
has_many :user_items, dependent: :destroy
has_many :items, through: :user_items
has_many :owned_items, through: :user_items, source: item, where: -> {
user_items: {owned: true}
}
end
class Item < ActiveRecord::Base
has_many :user_items, dependent: :destroy
has_many :users, through: :user_items
end
class UserItem < ActiveRecord::Base
belongs_to :user
belongs_to :item
scope :owned, -> {
where(owned: true)
}
end
create_table :user_items |t|
t.references :user
t.references :item
t.boolean :owned, null: false, default: false
end发布于 2015-04-27 18:29:57
我确信,通过用户和项目之间的多对多关联,您可以解决问题,但是如果您想要一个更清晰的解决方案,您必须在数据模型(oob方式)中“转换”您的想法。
您告诉我们: Item有一个所有者,也就是一个用户,并且有很多用户。因此,您需要一个所有者模型并构建一个第一:通过联想
例如,对于项目模型,可以设置:
>has_many :users
>has_one :user throught :owners
>has_one :owner对于用户模型,可以设置:
>has_many :items
>belongs_to :owner对于所有者模型,可以设置:
>has_one :user
>belongs_to :itemhttps://stackoverflow.com/questions/29901354
复制相似问题