RoR Трудность доступа к параметрам в контроллере - PullRequest
0 голосов
/ 02 августа 2011

У меня есть страница редактирования со следующим кодом, в основном это выпадающий список и кнопка, которая вызывает обновление.

  <% form_tag('switch_car', :method => :put) do%>
<div class="field">
    <label>Car Name:</label>
    <%= select("params", ":id", @available_cars.collect {|v| [v.name, v.id]})%>
</div>
<div>
    <%= submit_tag "Switch Car" %>
</div>
<% end %>

Сервер читает как устанавливаемые параметры:

Parameters: {"utf8"=>"Γ£ô", "authenticity_token"=>"8vHXrnICaOKrGns6FfMUcd/dWo5kpNKpA8F5l5ozRkY=", "params"=>{":id"=>"9"}, "commit"=>"Switch Car"}

Однако, когда я помещаю параметры в сессию, я ничего не получаю. Кажется, всегда ноль. Не уверен, что я делаю не так? Вот код в контроллере.

     def update
    if params[:id]
      session[:car_info_id] = params[:id]
      redirect_to entry_url
    else
      redirect_to switch_car_path
    end

  end

Он всегда перенаправляется на switch_car_path, поэтому я предполагаю, что params [: id] всегда равен nil. Когда я ставлю if params [: id] == nil, он переходит к entry_url.

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 02 августа 2011

Вы хотите params[:params][":id"]

В качестве альтернативы, вы можете указать это в виде:

<%= select("car_info", "id", @available_cars.collect {|v| [v.name, v.id]})%>

А затем в вашем контроллере:

if params[:car_info][:id]
1 голос
/ 02 августа 2011

Хотя другой ответ будет работать, вероятно, это то, что вы хотели бы сделать (использование select_tag(:id) автоматически добавит ключ / значение :id к хешу params):

<% form_tag('switch_car', :method => :put) do %>
  <div class="field">
    <label>Car Name:</label>
    <%= select_tag(:id, options_from_collection_for_select(@available_cars, "id", "name")) %>
  </div>
  <div>
    <%= submit_tag "Switch Car" %>
  </div>
<% end %>

Тогда вы можете легко получить доступ к params[:id] в контроллере.

...