0

より良い Model メソッドを書こうとする私の弱い試みで、私はひどく失敗しています。その結果、ここで質問するようになりました。

ここに私のモデルがあります:

class Group < ActiveRecord::Base
  # Because of inheritance issues with ActiveRecord
  # We tell this Relation to use a "false" column to persuade
  # The relation to push forward without worrying about Inheritance
  self.inheritance_column = :_type_disabled

  scope :expired?, where('expiration_date > ?', Time.now)
end

これは私が自分でやろうとしていることですscope

g = Group.find(91)
g.expired?

したがって、基本的に、グループの有効期限が切れているかどうかを確認できるかどうかを確認してください。今、コントローラーのactiverecord whereステートメントでこれを書くことができることを知っていますが、モデルでデータを処理することをよりよく理解しようとしていますRails

4

2 に答える 2

2

私が理解できる限り、あなたはインスタンスメソッドg.expired?を探しています。まさにこの理由から、scopeを使用できます。それは別の目的を果たします。したがって、本当にインスタンス メソッドが必要な場合は、次のようにする必要があります。

class Group < ActiveRecord::Base

  def expired?
    self.expiration_date > Time.now
  end
end

ちなみに、たとえば、有効期限が切れたすべてのグループが必要な場合は、スコープのある正しいパスにいました。ただし、クエリを適切に評価するにはラムダが必要であることに注意してください。

scope :expired, lambda { where('expiration_date > ?', Time.now) }
于 2012-04-23T21:10:01.403 に答える
2

それはスコープの目的ではありません;)

必要なことを行うには、インスタンス メソッドを追加するだけです。

def expired?
    expiration_date > Time.now
end

スコープは、期限切れのグループを選択するexpiredために使用されます。

scope :expired, lambda { where('expiration_date > ?', Time.now) }

そして、次のように使用します。

Group.expired
# or
user.groups.expired
#etc
于 2012-04-23T21:10:47.377 に答える