2

この協会:

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

だから私の質問は、レールがこの条件を属性に変えようとしているのはなぜですか? そして、どうすればそれを両方の方法で機能させることができますか? 私の推測では、レールは新しいレコードのデフォルト値として条件を設定しようとしています。

4

2 に答える 2

0

map_attribute はフィールドですか? このような場合、addresses.map_address があるためエラーが発生しますが、どのアドレス オブジェクトについて話しているのでしょうか。
つまり、Map_address はオブジェクトの属性のように見えるため、object1 には map_address があり、object2 には map_address がありますが、アドレスを入力すると、どのオブジェクトも参照していません。エラーになります。

于 2011-08-30T15:12:49.300 に答える