Xaxum
Xaxum

Reputation: 3675

RoR Difficulty accessing params in controller

I have an edit page with the following code, basically a dropdown and button that calls update.

  <% 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 %>

The server reads like the params is being set:

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

However, when I put the params into a session I get nothing. It seems to be always nil. Not sure what I am doing wrong? Here is code in the controller.

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

  end

It always gets redirected to the switch_car_path so I am assuming params[:id] is always nil. When I put if params[:id] == nil it goes to the entry_url.

Thanks in advance.

Upvotes: 0

Views: 920

Answers (2)

Dylan Markow
Dylan Markow

Reputation: 124439

While the other answer would work, this is probably what you'd want to be doing (using select_tag(:id) will automatically add an :id key/value to the params hash):

<% 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 %>

Then you can easily access params[:id] in the controller.

Upvotes: 1

klochner
klochner

Reputation: 8125

you want params[:params][":id"]

Alternatively, you could put this in your view:

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

And then in your controller:

if params[:car_info][:id]

Upvotes: 3

Related Questions