首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多对多,一对多

多对多,一对多
EN

Stack Overflow用户
提问于 2015-04-27 16:35:48
回答 2查看 444关注 0票数 1

我有两种型号的ItemUserItemUser创建和拥有。但是Item的用户也不是它的所有者。

似乎我需要很多到许多项目和用户之间的关系。此外,我还需要一个拥有许多项目的用户的一对多的所有权关系。

代码语言:javascript
复制
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

我把我的迁徙安排成这样。

用于保存用户和项之间的许多连接的表。

代码语言:javascript
复制
create_table :items_users, :id => false do |t|
  t.column :item_id, :integer
  t.column :user_id, :integer
end

以及ItemUser拥有的所有权。

代码语言:javascript
复制
add_reference :items, :user, index: true
add_foreign_key :items, :users

这意味着我可以使用Item访问item.user_id的所有者。我还可以使用item.usersuser.items访问许多用户和项目的关系。

我不知道如何通过User对象访问User拥有的项。User拥有的项目应该与user.items的许多关系中的项目不同。

我觉得我把一切都搞错了。我对rails非常陌生,我很困惑。在rails中实现这一点的正确方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-27 20:36:48

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2015-04-27 18:29:57

我确信,通过用户和项目之间的多对多关联,您可以解决问题,但是如果您想要一个更清晰的解决方案,您必须在数据模型(oob方式)中“转换”您的想法。

您告诉我们: Item有一个所有者,也就是一个用户,并且有很多用户。因此,您需要一个所有者模型并构建一个第一:通过联想

例如,对于项目模型,可以设置:

代码语言:javascript
复制
>has_many :users 
>has_one :user throught :owners
>has_one :owner

对于用户模型,可以设置:

代码语言:javascript
复制
>has_many :items
>belongs_to :owner

对于所有者模型,可以设置:

代码语言:javascript
复制
>has_one :user
>belongs_to :item
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29901354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档