在我的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排序?
答案 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
内的关联发生了变化。