我在哪里放置一个基于2个模型的方法?

时间:2012-04-12 20:42:51

标签: ruby-on-rails activerecord

我有一个用户模型和点模型。用户可以拥有许多点和点属于用户。

用户获得积分,我不知道应该在哪里放置这些模型的方法。例如,我想要一个“add_points”方法,为用户添加点。我认为应该进入用户模型,但我不确定。

我希望能够执行user1.add_points(:earn_for,amount)

或类似的东西。

3 个答案:

答案 0 :(得分:2)

当您将该方法添加到用户时,您可能不会做太多事情而不是挂钩create关系的has_many方法:

class User < ActiveRecord::Base

  has_many :points

  def add_point(reason, amount)
    points.create({:earned_for => reason, :amount => amount})
  end
end

如果速记有用,很棒;否则,您可能只使用关系中定义的辅助方法。有关详细信息,请参阅here

答案 1 :(得分:0)

我会像你描述的那样做

用户对象可以有add_points方法,在点对象上放置任何内容都没有意义,因为点对象代表一个抽象概念,用户对象代表特定用户。

答案 2 :(得分:0)

实际上,在这种情况下,您不需要任何其他方法来添加积分:就您的用户has_many而言:您可以通过以下方式为用户添加积分:

@user.points.create earned_for: reason, amount: amount