从 has_many_through 关系获取连接模型

发布于 2024-09-15 10:27:05 字数 322 浏览 5 评论 0原文

在我的 Rails 应用程序中,我有一个 has_many_through 关系。我想使用连接模型/表来存储一些有关该关系的数据(具体来说,该特定关系被使用了多少次)。

我正在我的一个类上编写一个添加方法,该方法应该检查与主题的任何现有关系,如果存在则更新该关系的计数器,如果不存在则创建它。

示例:

CoffeeDrinker 通过 Cup 与 Coffee 相关。每次 CoffeeDrinker 喝一口时,该特定杯子上的计数器都会增加。 CoffeeDrinker 第一次喝一口时,应该创建杯子并初始化计数器。

获取关系对象的最简单和/或最正确的方法是什么?

In my Rails app I have a has_many_through relation. I want to use the join model/table to store some data about the relation (how many times that particular relation is used, to be specific).

I'm writing an add-method on one of my classes which should check for any existing relation with the subject, update a counter on the relation if it exists or create it if it doesn't exist.

Example:

CoffeeDrinker is related to Coffee through Cup. Every time CoffeeDrinker takes a sip a counter on that particular Cup should be incremented. The first time CoffeeDrinker takes a sip, the Cup should be created and the counter initialized.

What is the easiest and/or most correct way to get a hold on the relation object?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

真心难拥有 2024-09-22 10:27:05

要么我不明白你的问题,要么你会惊讶地发现这是多么明显。
您将这样定义关系:

#coffee_drinker.rb
has_many :cups
has_many :coffees, :through => :cup

#cup.rb
belongs_to :coffee
belongs_to :coffee_drinker

#coffee.rb
has_many :cups
has_many :coffee_drinkers, :through => :cup

coffee_drinker.cups
coffee_drinker.coffees

coffee.cups
coffee.coffee_drinkers

#coffee_drinker.rb
after_save :update_cups_drunk

def update_cups_drunk
  cups.find_by_coffee_id(coffee_id).increment!(:count)
end

#maybe you don't have access to the coffee_id

def update_cups_drunk
  cups.find_by_coffee_id(coffees.last.id).increment!(:count)
end

Either I'm not understanding your question or you're going to be surprised how obvious this is.
You will have defined the relationship as so:

#coffee_drinker.rb
has_many :cups
has_many :coffees, :through => :cup

#cup.rb
belongs_to :coffee
belongs_to :coffee_drinker

#coffee.rb
has_many :cups
has_many :coffee_drinkers, :through => :cup

coffee_drinker.cups
coffee_drinker.coffees

coffee.cups
coffee.coffee_drinkers

#coffee_drinker.rb
after_save :update_cups_drunk

def update_cups_drunk
  cups.find_by_coffee_id(coffee_id).increment!(:count)
end

#maybe you don't have access to the coffee_id

def update_cups_drunk
  cups.find_by_coffee_id(coffees.last.id).increment!(:count)
end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文