gpt4 book ai didi

ruby-on-rails - 在 has_many :through rails 4. 1 上设置 inverse_of

转载 作者:行者123 更新时间:2023-12-04 03:04:04 28 4
gpt4 key购买 nike

该文档暗示 inverse_of 将适用于除多态关联之外的所有内容。
http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#module-ActiveRecord::Associations::ClassMethods-label-Setting+Inverses

但是它似乎 inverse_of 仍然不适用于 has_many :through

例如我在以下示例中为 inverse_of 尝试的每个组合都不起作用

class Event  < ActiveRecord::Base
has_many :attendances
has_many :users, through: :attendance
class User < ActiveRecord::Base
has_many :attendances
has_many :events, through: :attendances
class Attendance < ActiveRecord::Base
belongs_to :event
belongs_to :user

任何想法应该有效吗?如果是这样,我将如何在此示例中设置 inverse_of ?

更新

例如我试过的(也试过 has_many :through)
class Event  < ActiveRecord::Base
has_many :attendances , :inverse_of => :event
has_many :users, through: :attendance
end
class User < ActiveRecord::Base
has_many :attendances , :inverse_of => :user
has_many :events, through: :attendances
end
class Attendance < ActiveRecord::Base
belongs_to :event, :inverse_of => :attendances
belongs_to :user, :inverse_of => :attendances
end

也试过
class Event  < ActiveRecord::Base
has_many :attendances
has_many :users, through: :attendance , :inverse_of => :events
end
class User < ActiveRecord::Base
has_many :attendances
has_many :events, through: :attendances ,:inverse_of => :users
end
class Attendance < ActiveRecord::Base
belongs_to :event
belongs_to :user
end

最佳答案

我在 rails 4.1.6 中有同样的问题(这就是我偶然发现这个问题的方式)。

花了一些试验和错误(和服务器重新启动),但以下对我有用:

class User < ActiveRecord::Base
has_many :company_users
has_many :companies, through: :company_users
end

class Company < ActiveRecord::Base
has_many :company_users
has_many :users, through: :company_users
end

class CompanyUser < ActiveRecord::Base
belongs_to :company, inverse_of: :company_users
belongs_to :user, inverse_of: :company_users
end

为清楚起见:

Schema

示例:
user = User.last
company = user.companies.build( ... )
company.save
# ...
# SQL (0.9ms) INSERT INTO "public"."company_users" ("company_id", "created_at", "updated_at", "user_id") VALUES ($1, $2, $3, $4) RETURNING "id" [["company_id", 4], ["created_at", "2014-10-03 03:40:58.836975"], ["updated_at", "2014-10-03 03:40:58.836975"], ["user_id", 1]]
(1.6ms) COMMIT
CompanyUser.last
<CompanyUser:0x00000020339710> {
:id => 4,
:company_id => 4,
:user_id => 1,
:created_at => Thu, 02 Oct 2014 20:40:58 PDT -07:00,
:updated_at => Thu, 02 Oct 2014 20:40:58 PDT -07:00
}

所以基本上我只在连接模型中设置了 inverse_of

关于ruby-on-rails - 在 has_many :through rails 4. 1 上设置 inverse_of,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26053331/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com