Ruby ActiveRecord has_one с условиями - PullRequest
       0

Ruby ActiveRecord has_one с условиями

0 голосов
/ 11 августа 2011

Допустим, у меня есть Item s на продажу, и я отслеживаю их Cost исторически:

class Cost < ActiveRecord::Base
  belongs_to :item

  # eg: costs.amount = 123.45; costs.item_id = 1; costs.created_at = 2011-08-11 16:28
end

class Item < ActiveRecord::Base
  has_many :costs

  # eg: items.id = 1; items.name = Cheese Sandwich
end

Этот код работает, я могу вынуть все предыдущие расходы напредмет, который я продаю.

Я чувствую, что для Item должно быть возможно иметь второе предложение, чтобы я мог вытащить текущую цену напрямую:

class Item < ActiveRecord::Base
  has_many :costs
  has_one :current_cost, :class_name => :costs, :conditions => 'MAX(created_at)'
end

my_item.current_cost # => <£123.45, 45 minutes ago>

Любойидеи как этого добиться?

Ответы [ 3 ]

4 голосов
/ 11 августа 2011
class Item < ActiveRecord::Base
  has_many :costs
  def current_cost
    self.costs.order("created_at DESC").first
  end
end

my_item.current_cost
2 голосов
/ 26 августа 2011
has_one :current_cost, :class_name => :costs, :order => 'create_at DESC'
0 голосов
/ 11 августа 2011

Вы можете использовать область:

class Item < ActiveRecord::Base
  has_many :costs
  scope :current_cost, limit(1).order("created_at DESC")
end

использование:

my_item.current_cost
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...