Noob Question about params in my controller

I am passing several params from my view but need to put some logic
behind one of them. I pass a value of either "Yes" or "No" from my view
to the controller with the param known as "completed" under "update".

Here is my controller and view which works fine:

view->

<%= form_tag :action => 'update', :id => @project %>
<% form_for :project do |f| -%>
<table>
<tr>
<td><label for= "name">Project Name</label>
<%= f.text_field :name %>
</td><td>
<%= f.label :completed %>
<%= f.select(:completed, ["No", "Yes"] )%>
</td></tr></table>
<%= submit_tag 'Submit' %>
<%= form_tag %>
<% end -%>

controller->

def update
@project = Project.find(params[:id])
  if @project.update_attributes(params[:project])
   redirect_to :action => 'index', :id => @project
else
  render :action => 'edit'
end
end

I would like to add some logic to do something if the "completed" param
is equal to "Yes". Here is my attempt but it doesn't work:

def update
@project = Project.find(params[:id])
  if @project.update_attributes(params[:project])
    if params[:completed] == "Yes" do "something here" end
   redirect_to :action => 'index', :id => @project
else
  render :action => 'edit'
end
end

Can anyone help me put some logic in for just the value of the completed
param?

thanks

When you say it does not work what do you mean? If it is just a
syntax error that is because you have not got the syntax for 'if'
right, it should be
if params[:completed] == "Yes"
  .....
end
Note however that you are doing it *after* the record is saved, which
happens in update_attributes. If you are trying to do it before the
save then move it up to before the update.

Colin

Hi,

You can remove the form_tag. form_for will create that for you.

Then use something like:

f.label :completed

f.select(:completed, [[‘Yes’, true],[‘No’, false]])

Presumably Project has a boolean field called ‘completed’ with probably a :default => false on the migration.

Once you’ve updated your attributes you should probably just use:

if @project.completed?

do something clever here…

end

you have a form inside another form. change it to

<% form_for @project do |f| -%>

Project Name

<%= f.text_field :name %>

<%= f.label :completed %>

<%= f.select(:completed, [“No”, “Yes”] )%>

<%= submit_tag ‘Submit’ %>

<%= form_tag %>

<% end -%>

catch what you want like this params[:project][:completed]

thanks alot for all the help!