2015-02-20 2 views
2

Я играю с рельсов консоли:Model.where (...) первый атрибут не ноль, но показывает ноль

a = Event.where("location_id IS NULL") 
    Event Load (0.7ms) SELECT "events".* FROM "events" WHERE (start_date >= '2015-02-20' OR end_date >= '2015-02-20') AND (location_id IS NULL) 
=> #<ActiveRecord::Relation [#<Event id: 58, name: "BENNY GREB CLINIC w Hard Rock Cafe Warszawa", start_date: "2015-02-21", end_date: nil, location: "Hard Rock Cafe Warsaw,ul. Złota 59,Warsaw,Poland", logo_url: "https://fbcdn-sphotos-c-a.akamaihd.net/hphotos-ak-...", website: "", facebook: "https://www.facebook.com/events/535924839876600", created_at: "2015-02-19 17:38:29", updated_at: "2015-02-19 17:38:29", logo_file_file_name: nil, logo_file_content_type: nil, logo_file_file_size: nil, logo_file_updated_at: nil, location_id: nil>]> 

So location: "Hard Rock Cafe Warsaw,ul. Złota 59,Warsaw,Poland"

Но когда я делаю:

2.2.0 :002 > a.first.location 

я

=> nil 

Почему?

+3

Я предполагаю, что у вас есть атрибут местоположения, а ассоциация местоположения и рельсы используют ассоциацию. Вам нужно переосмыслить структуру вашей базы данных. –

+0

. Каков результат: a.attributes – tebayoso

+0

Что такое вывод 'a.first' – Sontya

ответ

2

У вас есть атрибут местоположения, а ассоциация местоположения и рельсы используют ассоциацию. Вам нужно переосмыслить структуру базы данных, чтобы они были названы по-разному.

1

В соответствии с первым комментарием в вопросе:

Вы можете использовать активную запись ассоциации:

has_one :location 

или

belongs_to :location 

Активная запись даст преимущество в отношении более атрибут модели.

Попробуйте добавить:

has_one/belongs_to :location, as: 'related_location' 

Для модели для того, чтобы обеспечить расположение всегда определение атрибута. И вы получите доступ к соответствующему местоположению (используя location_id), используя метод с псевдонимом.

Смежные вопросы