1

在我的 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 排序?

4

3 回答 3

2

如果你想订购device_ports,我会做这样的事情:

@device_ports = Device.find(params[:id]).device_ports.all(:order => 'id ASC')
于 2013-08-07T12:35:29.120 回答
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.xx 使用以下

@device_ports = DeviceSport.find(:all, :conditions => ["device_id = ?", params[:id]], :order => 'id ASC' )
于 2013-08-07T12:22:05.333 回答
1

好吧,您只是订购设备,端口是随机获取的。您可以预先加载您的关联并使用以下命令订购端口:

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

记下生成的查询。加入端口时,您可以访问端口表。

更新:

如果你想反过来:

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

只有里面的关联includes被改变了。

于 2013-08-07T12:23:10.840 回答