如何在一次通话中获取子模型(记录)?

Jon*_*ark 2 ruby-on-rails

我正在研究Rails 3.2.6应用程序.我有一个Status模型,一个Event模型和一个Photo模型.

事件

Has_many :statuses
Run Code Online (Sandbox Code Playgroud)

状态

Belongs_to :event
Has_one :photo
Run Code Online (Sandbox Code Playgroud)

照片

Belongs_to :status
Run Code Online (Sandbox Code Playgroud)

我想获取属于所选事件的所有状态消息(这很好)但我也希望得到属于每个状态消息的照片.我怎样才能做到这一点?

这是我获取属于事件的状态消息的方式:

@event = Event.find_by_id (params[:event_id])
@event.statuses
Run Code Online (Sandbox Code Playgroud)

如何在输出中获取每条状态消息的关联照片?我已经开始了,我想我应该做这样的事情?但是这只能得到照片并且不会将它们与各自的状态信息"合并".

@photos = @event.statuses.collect {|status| status.photo}
Run Code Online (Sandbox Code Playgroud)

Lok*_*ana 5

如果您想减少查询,可以执行以下操作

@statuses = Status.where(:event_id=>params[:event_id]).includes(:photo).all
Run Code Online (Sandbox Code Playgroud)

然后你就可以这样访问了

@statuses.each do |status|
    status.event_id # access the status
    status.photo # access the photo
    # status.nil? will check whether photo is there or not
end
Run Code Online (Sandbox Code Playgroud)