2016-07-23 3 views
0

Я пытаюсь получить значения от front, rear, side атрибутов от tints объекта.Невозможно получить доступ к значениям из атрибута таблицы

производителей {id, name}
модель {id, manufacturer_id, name}
оттенков {id, manufacturer_id, model_id, front, side, rear}

Это мой tints_controller.rb

def generate 
    @manufacturers = Manufacturer.find(params[:tint][:manufacturer_id]) 
    @models = Model.find(params[:tint][:model_id]) 
    @price_front = Price.find(params[:price][:price_front]) 
    @price_rear = Price.find(params[:price][:price_rear]) 
    @measurements = Tint.where('manufacturer_id' => @manufacturers).where('model_id' => @models) 
    end 

я получил ошибку, когда я пытаюсь сделать <%= @measurements.rear %> в моем generate.html.erb

undefined method `rear' for #<Tint::ActiveRecord_Relation:0x0000000c628610> 

Вот экран отладки

Request 

Parameters: 

    {"utf8"=>"✓", 
    "authenticity_token"=>"jfV6SUkNdKWO1f1fyzqS4eLbvszjDPNm2E81M90lnvPArYScSjcjQlxsJdcuqQMJ+mSecCsyVQlhz2cpAH1DUw==", 
    "tint"=>{"manufacturer_id"=>"6", "model_id"=>"3"}, 
    "price"=>{"price_front"=>"1", "price_rear"=>"2"}, 
    "commit"=>"Submit"} 

Однако, когда я <%= @measurements.inspect %>, он показал строку ниже, указав @measurements в tints_controller определен правильно. Он показывает, что он может получить всю строку из таблицы, выполнив поиск правильных model_id и manufacturer_id. Но я не могу получить front, side, rear значения, как в int непосредственно делая <%= @measurements.front =>

#<ActiveRecord::Relation [#<Tint id: 1, manufacturer_id: 6, model_id: 3, front: 40, side: 50, rear: 60, created_at: "2016-07-22 04:14:49", updated_at: "2016-07-22 04:14:49">]> 

То, что я сделал: я пытался сделать <%= @measurements[:front] => и <%= @measurements[:id][:front] =>, и я все еще получаю ошибки.

ответ

0

При выборе из ActiveRecord, используя where, он возвращает ActiveRecord_Relation объект, который всегда массив связанных объектов, потому что несколько объектов могут быть возвращены из where запроса.

Вам нужно либо указать, какие Tint быть выбраны в окне:

@measurements.first.rear 

или вам нужно изменить ваш контроллер выбрать только первый объект, который возвращается:

@measurements = Tint.where('manufacturer_id' => @manufacturers).where('model_id' => @models).first 
Смежные вопросы