has_many ассоциация с select - PullRequest
       30

has_many ассоциация с select

3 голосов
/ 07 февраля 2012

все!Я хочу создать дополнительное отношение has_many для выбора только нужных столбцов

Пример

class Price < ActiveRecord::Base
  self.table_name = "pricelist_prices"
  has_many :order_items, :primary_key=> :city_id, :foreign_key=> :city_id
  has_many :orders, :through => :order_items   
end

, так что теперь это работает.Но я хотел бы создать ассоциацию, которая работает следующим образом: ордера, но имеет: select option

Пример

has_many :orders, :through => :order_items, :select=>"price"

Но я не хочу переопределять текущее: присвоение ордеров.Как это сделать?

UPD Azoto показать пример с опцией источника!Это нормально, но когда я использую эту привязку во включениях, она не работает.

 Price.where(:id=>[12759,12758]).includes(:prices_from_orders)
   (Object doesn't support #inspect)

   Price.where(:id=>[12759,12758]).includes(:prices_from_orders).first
NoMethodError: undefined method `each' for nil:NilClass
    from /Users/igorfedoronchuk/.rvm/gems/ruby-1.9.2-p180@new/gems/activerecord-3.2.1/lib/active_record/associations/preloader/association.rb:88:in `block in associated_records_by_owner'

UPD2

Я понял проблему, если вы хотите использовать такую ​​ассоциацию в методе include, такжедобавьте выделение primary_key, иначе AR не знает, кто является владельцем записи.

has_many :orders, :through => :order_items, :select=>"id, price"

1 Ответ

8 голосов
/ 07 февраля 2012

Вы можете создать новую relation, которая стоит select цену.

has_many :price_of_orders, :through => :order_items,
                           :source => orders,
                           :select => :price

OR

Как насчет расширения ассоциации ?.

has_many :orders, :through => :order_items do
  def just_price
    select(:price)
  end
end

Тогда вы могли бы сделать что-то вроде @price.orders.just_price

...