0

私の見解device_portsでは、特定の のを取得するために ajax リクエストを送信しますdevice

以前私が使用した

def get_device_ports
  if params[:id] != ''
    @device_ports = Device.find(params[:id]).device_ports.all(:order => 'id ASC')
    output = '<option value="">Select Device Port...</option>'
    @device_ports.each do |device_port|
      output = output + '<option value="' + device_port.id.to_s + '">' + device_port.name + '</option>'
    end
    render :text => output
  else
    render :text => '0'
  end
end

どちらが機能しましたが、クエリを変更したため、エラーが発生しundefined method 'name' for [268, "test-1"]:Array268結果の最初の行になります。test-1idname

これは私の更新されたコードです:

def get_device_ports
  if params[:id] != '' and params[:device_id] != ''
    # @device_ports = Device.find(params[:id]).device_ports.all(:order => 'id ASC')
    device_id = params[:device_id]
    # Need a list of ports that aren't in use or are multiuse
    @device_ports = ActiveRecord::Base.connection.execute('SELECT DISTINCT d.id, d.name FROM device_ports d LEFT OUTER JOIN circuits c ON c.physical_port_id = d.id WHERE (c.physical_port_id IS NULL AND d.device_id = ' + device_id + ') OR (d.multiuse = 1 AND d.device_id = ' + device_id + ') ORDER BY d.id ')
    output = '<option value="">Select Device Port...</option>'
    @device_ports.each do |device_port|
      output = output + '<option value="' + device_port.id.to_s + '">' + device_port.name + '</option>'
    end
    render :text => output
  else
    render :text => '0'
  end
end

エラーが発生する理由がわかりません。些細なことだと思いますが、さまざまなNoMethodError質問があるため、答えを見つけるのは困難です。

4

1 に答える 1