- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我是编程新手,很难确定我需要的模型关联。我已经有两个表:具有 1:many 关系的组织和用户,因为一个组织有多个用户/成员。尽管并非所有用户都是组织的成员,但这不是问题。
# In the organization model:
has_many :users
# In the user model:
belongs_to :organization, inverse_of: :users
# In the users migration file:
t.references :organization, index: true, foreign_key: true
我需要用主持人功能来扩展它:一个用户可以是多个组织的主持人,一个组织可以有多个用户作为他们的主持人。因此,用户和组织模型之间的关系将有两个不同的原因(用户作为组织的成员,用户作为组织的主持人;在成为主持人之前不需要成员)。
我读了here关于创建关联的两种不同可能方式,即 has_many :through
或 has_and_belongs_to_many
。
The simplest rule of thumb is that you should set up a has_many :through relationship if you need to work with the relationship model as an independent entity. If you don't need to do anything with the relationship model, it may be simpler to set up a has_and_belongs_to_many relationship (though you'll need to remember to create the joining table in the database). You should use has_many :through if you need validations, callbacks, or extra attributes on the join model.
我不确定“如果您需要将关系模型作为一个独立的实体来处理”是什么意思。在我的用例中,主持人将拥有额外的权利。我相信,该关联将以两种方式使用:1) 显示组织的版主,以及显示用户是其版主的组织;和 2) 查看用户是否具有主持人权限以授予他这些权限。所以我认为我不需要验证(组织本身可以选择用户作为版主)或额外的属性。我不确定回调(不知道它们到底是什么)。
简而言之,在我的用例中,两种关联形式中哪一种是最好的关联?
最佳答案
“如果您需要将关系模型作为一个独立的实体来使用”意味着您将能够像任何其他 ActiveRecord 模型一样在关系模型上进行操作,即您可以创建、保存、销毁等记录或分配各种类型关系的属性。
例如,假设用户可能与组织有不同类型的关系(例如版主、员工、股东等)。使用 :through 关联,您将拥有:
class Relationship < ActiveRecord::Base
belongs_to :user
belongs_to :organization
end
class User < ActiveRecord::Base
has_many :organizations, through: relationships
end
class Organization < ActiveRecord::Base
has_many :users, through: relationships
end
# schema.rb
ActiveRecord::Schema.define(:version => 20150511223747) do
# . . . .
create_table "relationships", :force => true do |t|
t.string "relationship_type"
t.integer "user_id"
t.integer "organization_id"
t.datetime "created_at"
t.datetime "updated_at"
end
end
# things you can do:
org = Organization.first
moderators_or_employees = org.users.where("relationship_type = 'moderator' OR relationship_type = 'employee'")
new_moderators = org.users.where("relationship_type = 'moderator' AND DATE(relationships.created_at) > '2015-01-01'")
这些是您无法使用 has_and_belongs_to_many 关联执行的操作,因为您无法查询关系类型或 created_at。由于这些限制,我经常发现 :through 关系虽然有点复杂,但可以提供更多的灵 active 。
关于ruby-on-rails - 在 has_many :through and has_and_belongs_to_many association 之间进行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31061531/
我有一个具有以下模型的应用程序:- 类别- 子类别- 产品- 产品子类别 我的关系如下: Category has_many :subcategories Subcategory belongs_to
看来 rails 仍然不支持这种类型的关系并抛出 ActiveRecord::HasManyThroughAssociationPolymorphicThroughError 错误。 我该怎么做才能实
我想知道我可以在多大程度上使用 Rails 中的关联。考虑以下因素: class User :provider end class Provider :businesses belongs
我是 Rails 的新手。我想知道我是否需要将 add_index 添加到两个迁移? 我正在尝试定义用户和事件。每个用户可以有多个事件,每个事件可以有多个用户。所以我会做这样的事情: class Us
我有这个: class User :series end class Serial :serials end class Episode < ActiveRecord::Base belong
我一直致力于一个大量使用模型关联的项目,似乎我发现了 has_many 或 has_one through 功能与 :conditions 功能冲突的情况。简而言之,问题是 through 关联为 h
模拟以下情况的最佳方法是什么: Word belongs_to :wordable, :polymorphic => true Phrase has_many :words, :as => :
这似乎是一个典型的问题,但很难搜索。 我想选择用户通过 has_many 拥有的项目和用户通过 has_many through 关联的项目。 考虑以下模型: class User < ActiveR
首先对英语感到抱歉 所以我已经有了“用户 - 帖子”一对多关联,这意味着每个帖子只能有一个作者,现在我想在用户个人资料中添加“最喜欢的帖子”按钮,以及“添加到收藏夹”按钮每个帖子,所以问题是如何实现这
我有一个用户模型,允许用户关注其他用户。每个用户也有很多东西: class User has_many :following, :class_name => 'Followings', :fore
我正在使用 Rails 4.1 和 Ruby 2.1。 一个用户 has_many 辆车,和一辆车 has_many 约会。获取所有用户约会的最简单方法是什么? 理想情况下,我想做这样的事情:user
我想为 has_many/has_many 关系定义一个工厂(我想我做对了)但是我不知道如何为这些创建的工厂的每个对象定义属性。 这是主页,这是交易卡片的列表 我们假设下面的主页 View 是针对登录
我正在努力弄清楚如何实现这个计数。模型是用户、测试、等级 用户 has_many 测试,测试 has_many 成绩。 每个等级都有一个计算分数(strong_pass、pass、fail、stron
我有一个 has many through 关系来定义用户已回答的问题。 如何为用户创建的问题建立关系? 通常你会在用户和问题之间创建一个 has_many 和 belongs_to 关系,但是因为我
例如,在 class Student < ActiveRecord::Base has_many :awards end class Awards < ActiveRecord::Base b
我仍然在尝试如何处理在Ecto中创建/更新has_many, through:关联。我已经重新阅读了José's关于关联以及the docs的帖子,但我仍在努力。 我所拥有的是: 网站/模型/dish
# == Schema Information # # Table name: orders # # id :integer not null, pri
我正在尝试从 EventView.promoter_id = User.id 的用户获取事件,但它无法正常工作。这是我的设置(目前不正确): User has_many :events has_man
我有三门课 TeamMember , Service和ServiceTeamMember 我有 class Service has_many :service_team_members has
我需要列出所有用户及其销售的产品总量及其电子邮件和产品总量, class User :user).group('users.email').sum(:quantity) 关于mysql - 事件记录
我是一名优秀的程序员,十分优秀!