2012-03-21 14 views
0

は、私はこのようなユーザーオブジェクトとなっ名を持って働いていないクラス名とidを返すには、罰金です:「名前」AR属性

>u=User.find(1) 
>u.name 
>jt 

が、それは、オブジェクトとの関連を持っている私は戻ってユーザーを取得するときそれは、クラスの名前を返します。

oc=ObjectConnection.find(1) 
oc.user.name 
> User 

をとidは私にエラーを与えている:

ruby-1.9.2-p290 :063 > oc.user.id 
NoMethodError: User Load (0.4ms) SELECT id, name FROM `users` WHERE (id=1) 
undefined method `id' for [#<User id: 1, name: "jt">]:ActiveRecord::Relation 
    from /Users/jt/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0/lib/active_record/relation.rb:459:in `method_missing' 
    from (irb):63 
    from /Users/jt/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.1.0/lib/rails/commands/console.rb:45:in `start' 
    from /Users/jt/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.1.0/lib/rails/commands/console.rb:8:in `start' 
    from /Users/jt/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.1.0/lib/rails/commands.rb:40:in `<top (required)>' 
    from script/rails:6:in `require' 
    from script/rails:6:in `<main>' 
ruby-1.9.2-p290 :064 > 

クラスは次のとおりです。

class ObjectConnection < ActiveRecord::Base 
    belongs_to :user 
end 

class User < ActiveRecord::Base 
    has_many :object_connections 
end 

何が起こっているのですか?これは本当にシンプルなようです。

+0

あなたが参照しているobject_connectionインスタンスのid = 1ですか?上記のコードでobject_connectionのIDではなく、そのidでobject_connectionを探しています。 – numbersnelson

+0

ObjectConnectionに#userメソッドの実装がありませんか?奇妙なことは、#userがselect句でidとnameを明示的に指定してリレーションを返すことです。 – noodl

+0

@numbersnelson - 私はちょうどそれが直接出力をうまく動作することを示しています。 – timpone

答えて

0

THXは、私が連絡先と当社との間に、ほぼ同一の関係持っている(会社、会社のhas_manyの接点belongs_toの連絡先を。)ここに私のレールコンソール(Railsの3.2、Rubyの1.9.3)があります。

1.9.3p125 :019 > company = Company.find(1) 
Company Load (2.7ms) SELECT "companies".* FROM "companies" WHERE "companies"."id" = $1 LIMIT 1 [["id", 1]] 
=> #<Company id: 1, name: "Acme Corp", created_at: "2012-03-20 17:49:44", updated_at: "2012-03-20 17:49:44"> 
1.9.3p125 :020 > contact = Contact.find(1) 
Contact Load (1.8ms) SELECT "contacts".* FROM "contacts" WHERE "contacts"."id" = $1 LIMIT 1 [["id", 1]] 
=> #<Contact id: 1, first: "Tom", last: "Harrison", email: "[email protected]", created_at: "2012-03-12 19:11:57", updated_at: "2012-03-20 17:56:37", birthdate: "1962-02-26", company_id: 1> 
1.9.3p125 :021 > contact.company.name 
Company Load (0.7ms) SELECT "companies".* FROM "companies" WHERE "companies"."id" = 1 LIMIT 1 
=> "Acme Corp" 

「名前」が以前のバージョンのARELで使用されていたのかもしれません。また、奇妙なSQL構文... WHERE (id=1) ...に注目してください。ObjectConnectionの別の属性を探すとどうなりますか?

これは同じ状況ですか?おそらくRailsのバージョンですか?ルビー?信じられないようだが、答えは "あなたは正しいことをしている"。

関連する問題