Model.where(...)。第一个属性不是nil但是显示为nil

时间:2015-02-20 15:26:33

标签: ruby-on-rails ruby ruby-on-rails-4

我正在玩rails console:

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>]> 

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

但是当我这样做时:

2.2.0 :002 > a.first.location

我得到了

 => nil 

为什么?

2 个答案:

答案 0 :(得分:2)

您有一个位置属性和位置关联,并且rails正在使用该关联。您需要重新考虑数据库结构,以便命名不同。

答案 1 :(得分:1)

根据问题中的第一条评论:

您可能正在使用有效记录关联:

has_one :location

belongs_to :location

活动记录将优先考虑模型属性的关系。

尝试添加:

has_one/belongs_to :location, as: 'related_location'

对模型以确保位置始终定义属性。您将使用别名方法访问相关位置(使用location_id)。