has_one: условия интерпретируются как атрибуты? - PullRequest
2 голосов
/ 30 августа 2011

Эта связь:

class Business < ActiveRecord::Base
  has_one    :map_address, :as=>:addressable, :class_name => 'Address', :conditions => {'addresses.map_address'=>true}, :dependent => :destroy
end

Причины этой ошибки:

ruby-1.8.7-p334 :005 > n = Business.new
ruby-1.8.7-p334 :006 > n.build_map_address
ActiveRecord::UnknownAttributeError: unknown attribute: addresses.map_address

Код, используемый для чтения

:conditions => {:map_address=>true}

Но отсутствие имени таблицы приводит к этомупроблема при поиске (это помещает имя поля в неправильную таблицу):

ActiveRecord::StatementInvalid (PGError: ERROR:  column counties.map_address does not exist
                                                             ^
SELECT "businesses".* FROM "businesses"   INNER JOIN "addresses" ON ("businesses"."id" = "addresses"."addressable_id" AND "addresses"."addressable_type" = 'Business')  INNER JOIN "counties" ON ("counties"."id" = "addresses"."county_id") AND counties."map_address" IS NULL  WHERE (counties.id = 23)  ORDER BY businesses.updated_at DESC):

Эта опция:

"adresses.map_address is true"

вызывает эту ошибку при поиске:

PGError: ERROR:  missing FROM-clause entry for table "adresses"
LINE 1: ..." ON ("states"."id" = "addresses"."state_id") AND adresses.m...
                                                             ^
: SELECT "businesses".* FROM "businesses"   INNER JOIN "addresses" ON ("businesses"."id" = "addresses"."addressable_id" AND "addresses"."addressable_type" = 'Business')  INNER JOIN "states" ON ("states"."id" = "addresses"."state_id") AND adresses.map_address is NULL  WHERE (states.id = 4)  ORDER BY businesses.updated_at DESC

Итак, мой вопрос: почему рельсы пытаются превратить это условие в атрибут?И как я могу заставить его работать в обе стороны?Я предполагаю, что rails пытается установить условие в качестве значения по умолчанию для новой записи.

Ответы [ 2 ]

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

почему бы и нет

has_one    :map_address, :as=>:addressable, :class_name => 'Address', :conditions => {:map_address => true}, :dependent => :destroy
0 голосов
/ 30 августа 2011

Является ли map_attribute полем?В таком случае возникает ошибка, потому что у вас есть address.map_address, но о каком объекте адресов вы говорите?записывая адреса, вы не ссылаетесь на конкретный адресДругими словами, Map_address кажется атрибутом объекта, поэтому у object1 есть свой map_address, у object2 свой map_address, но когда вы вводите адреса, вы не ссылаетесь ни на один объект, и это вызывает ошибку.

...