2013-02-25 6 views
0

Я новичок в Ruby on Rails. У меня есть 2 модели: Device и Property. Device содержит следующие поля: id,name и Property содержит: файлы id,device_id,speed,time. device_id - это внешний ключ таблицы id в модели Device. Так что мои модели device.rb и property.rb будет выглядеть следующим образом:Получение значений из двух таблиц

device.rb

class Device < ActiveRecord::Base 
    attr_accessible :name 
    has_many :properties 
end 

property.rb

class Property < ActiveRecord::Base 
    attr_accessible :device_id, :speed, :time 
    belongs_to :device 
end 

Я должен заполнить детали устройства в раскрывающемся списке , Он работает правильно. Мне также нужно получить значения из базы данных свойств при выборе имени из раскрывающегося списка.

код

контроллер, чтобы получить значение, передав идентификатор устройства следующим образом:

def show 
    @properties = Property.find(params[:device][:id]) 
end 

тестовых значений в таблице свойств следующим образом: модель

id device_id time   speed 
1 1   13:23:00  13 
2 2   23:20:00  63.8  
3 1   10:35:  100.56 

Прибор:

id name  
1 2345  
2 2345 

При выборе идентификатора модели устройства 1 я должен получить детали:

id device_id  time   speed  
1 1    13:23:00   13 
3 1    10:35:00   100.56 

В видовом show.html.erb следующим образом:

<% if (@properties.blank?) %> 
    <p><strong>Search results not found.</strong></p> 
<% else %> 
    <p><strong>Available employe Details are listed below <strong></p> 
    <ul> 
    <% @properties.each do |c| %> 
    <li> 
     <b><%[email protected]%> <%[email protected]%> <%[email protected]%></b> 
    </li> 
    <% end %> 
</ul> 
<% end %> 

во время работы этого я получаю эту ошибку

undefined method `each' for #<Property:0x3ee3ff8> 
10: <% else %> 
11: <p><strong>Available employe Details are listed below <strong></p> 
12: <ul> 
13: <% @properties.each do |c| %> 
14: <li> 
15: <b><%[email protected]%> <%[email protected]%> <%[email protected]%></b> 
16: </li> 

Но пока скрутить show.html.erb как в следующем примере только одна из данных получает

id device_id  time   speed  
1 1    13:23:00   13 



<% if (@properties.blank?) %> 
    <p><strong>Search results not found.</strong></p> 
<% else %> 
    <p><strong>Available employe Details are listed below <strong></p> 
    <ul><li> 
    <b><%[email protected]%> <%[email protected]%> <%[email protected]%></b> 
    </li></ul> 
<% end %> 
+0

С одной стороны ' Property.find' вернет только один объект. Это не будет коллекция, поэтому вы не можете называть ее «каждый». – Mischa

ответ

4
@properties = Property.find(params[:device][:id]) 

будет возвращать только одно свойство, а не массив

Вам нужно так что-то вроде

@properties = Property.where(:device_id => params[:device][:id]) 

для того, чтобы получить массив, который вы можете затем перебирать с каждым

+1

Или: '@properties = Device.find (params [: device] [: id]). Properties' – Mischa

+0

@Mischa true, хотя это создаст больше запросов к базе данных и без необходимости извлекает информацию об устройстве. – Damp

+0

Да, ты прав. Не думал об этом. – Mischa

Смежные вопросы