2016-02-18 3 views
0

сильный текст Я пытаюсь сделать динамические ячейки выбора через "data-remote attribute for select boxes". В консоли кажется, что я получаю правильные параметры (идентификатор выбранного make), но я не могу понять, как передать его контроллеру, чтобы получить модели с соответствующими make_id: s.Передача вложенных параметров для переменных экземпляра

Heres в attached_vehicles образуют часть из _form.html.erb

<div class="vehicle_field"> 
    <%= f.fields_for :attached_vehicles do |av| %> 
    <p>Select make</p> 
    <%= av.select :make, (@makes.collect { |m| [m.make_name, m.id] }), { include_blank: "Select make" }, { data: { remote: true, url: "update_make_models", name: "make", update: "#diy_attached_vehicles_attributes_0_model"} } %><br> 
    <p>Select model</p> 
    <%= av.collection_select :model, @models, (render "make_models/make_model"), { prompt: "Select model" } %><br> 
    ... 
    <% end %> 
</div> 

../views/diys/update_make_models.coffee

$.empty() 
    .append("<%= escape_javascript(render "make_models/make_model") %>") 

../diys_controller.rb

... 
def update_make_models 
    @models = MakeModel.where("make_id = ?", params[:make]) 
end 

def new 
    @diy = Diy.new 
    @step = @diy.steps.new 
    @attached_vehicle = @diy.attached_vehicles.new 
    @step.add_images_to_steps.new 
    @makes = Make.all 
    @models = MakeModel.where("make_id = ?", params[:make_id]) 
end 
... 

../views/make_models/_make_model.html.erb

<% @models.collect do |models| %> 
    <option value="<%= models.id %>"><%= models.make_model_name %></option> 
<% end %> 

И вот что я получаю в консоли после выбора сделать в блоке выбора делает

Started GET "/diys/update_make_models?diy%5Battached_vehicles_attributes%5D%5B0%5D%5Bmake%5D=12" for ::1 at 2016-02-18 20:22:35 +0200 Processing by DiysController#update_make_models as JS 
    Parameters: {"diy"=>{"attached_vehicles_attributes"=>{"0"=>{"make"=>"12"}}}} 
    MakeModel Load (1.0ms) SELECT "make_models".* FROM "make_models" WHERE (make_id = NULL) 
    Rendered make_models/_make_model.html.erb (3.0ms) 
    Rendered diys/update_make_models.coffee (491.0ms) 
Completed 200 OK in 628ms (Views: 626.5ms | ActiveRecord: 1.0ms | Solr: 0.0ms) 

-------------------------------------------------- -------------------------------------------------- -------------------------------- Редактировать

NameError (undefined local variable or method `attached_vehicles_attributes' for #<DiysController:0x5757648>): 
    app/controllers/diys_controller.rb:28:in `update_make_models' 

ответ

1

Ваш params хэш (в соответствии с бревнами): {"diy"=>{"attached_vehicles_attributes"=>{"0"=>{"make"=>"12"}}}}. Итак, если вы хотите получить :make_id от него, вы должны написать:

def update_make_models 
    @models = MakeModel.where(make_id: params["diy"]["attached_vehicles_attributes"]["0"]["make"]) 
end 
+0

Теперь он дает мне эту ошибку в консоли после выбора сделать 'NameError (неопределенным локальным переменным или метод' attached_vehicles_attributes' для # ): приложение/контроллеры/diys_controller.rb: 28: in 'update_make_models'' –

+0

Ответ обновлен. попробуй это. – Ilya

+0

Да, это сработало! Благодаря! :) –

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