1

私の Rails アプリケーションには、1 対多の関係を持つ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

1

さて、あなたはデバイスだけを注文していて、ポートはランダムに取得されています。アソシエーションを熱心にロードし、これでポートを注文できます。

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

生成されたクエリについてメモします。それらに参加すると、ports テーブルにアクセスできます。

アップデート:

逆にしたい場合:

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

内の関連付けのみincludesが変更されます。

于 2013-08-07T12:23:10.840 に答える
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 に答える