'name' AR-атрибут, возвращающий имя класса и идентификатор не работает - PullRequest
0 голосов
/ 22 марта 2012

У меня есть объект User, и получение имени выглядит так:

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

, но у него есть связь с объектом, который, когда я возвращаю пользователя, возвращает имя класса:

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

и идентификатор дает мне ошибку:

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

Что происходит?Это кажется действительно простым.

thx

1 Ответ

0 голосов
/ 22 марта 2012

У меня почти идентичные отношения между Контактом и Компанией (Контакт принадлежит компании, компании есть_меня контактов.) Вот моя консоль rails (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: "foo@example.com", 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?Рубин?Кажется неправдоподобным, но ответ: «Вы делаете это правильно».

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