使用:使用find_by_id订购

时间:2013-08-07 12:19:27

标签: ruby-on-rails-2

在我的Rails应用程序中,我有一个Device和一个DevicePort类,它们之间有一对多的关系。

在我的device控制器中,我得到了属于该设备的所有端口的列表,但我似乎无法订购它们:

@device_ports = Device.find_by_id(params[:id], :order => 'id ASC').device_ports

这似乎不起作用,也没有给出任何语法错误。

在视图中我只是在做:

<% @device_ports.each do |device_port| %>
    ...
<% end %>

是否有人能够解释为什么端口没有按ID排序?

3 个答案:

答案 0 :(得分:2)

如果您想订购device_ports,我会这样做:

@device_ports = Device.find(params[:id]).device_ports.all(:order => 'id ASC')

答案 1 :(得分:1)

@device_ports = Device.exists?(params[:id]) ? Device.find_by_id(params[:id]).device_ports : []

如果您想在设备上订购体育,请执行以下操作

@device_ports = Device.exists?(params[:id]) ? Device.find_by_id(params[:id]).device_ports.order('id ASC') : []

对于rails 2.x.x,请使用以下

@device_ports = DeviceSport.find(:all, :conditions => ["device_id = ?", params[:id]], :order => 'id ASC' )

答案 2 :(得分:1)

嗯,您只是订购设备,端口是随机获取的。您可以通过以下方式急切加载关联并订购端口:

Device.includes(:device_ports).where('devices.id = ?', params[:id]).order('device_ports.id')

记下生成的查询。您可以在加入ports表时访问ports表。

更新:

如果你想要反过来:

DevicePort.includes(:device).where('devices.id = ?', params[:id]).order('device_ports.id')

includes内的关联发生了变化。