I'v read: Rails: Pass parameters with render :action? ,but I'm still having problems.
My URL for the new page is: http://localhost:3000/submit?category_id=2. Submitting the form the first time works without any problems, but if the creation fails and the controller renders a new page I get an error can't find category without id because the parameter is not being passed.
Here's a short version of the new.html.erb and new/create controllers
def new
...
@category = params[:category_id]
@title = "Submit a review"
end
def create
....
if @review.save
flash[:success] = "New a Created"
redirect_to user_path(@user)
else
@title = "New Review"
render :action => 'new', :category_id => @category
end
end
Line 1 below is giving me the error.
<h1>Blah, blah, blah<%= "best #{Category.find(@category).name}" %></h1>
<br />
<%= form_for(...) do |f| %>
<%= render 'shared/error_messages', :object => f.object %>
<tr>
<td> <%= select_tag(... %></td>
开发者_StackOverflow <td><%= collection_select(...) %><br /> %></td>
<td><%= f.text_field ... %></td>
</tr>
</table>
<%= f.hidden_field :category_id, :value=>@category %>
<div class="actions">
<%= f.submit "Add" %>
</div>
<% end %>
Any help is appreciated. I've been going in circles for hours.
I think the else clause of your 'create' method will need to roughly mirror your 'new' method, which means populating @category
again from your params
hash.
So first make sure your hidden field is populated, then check the contents of params
when the form is submitted. category_id
should be there and you'll need to grab it again as you did in 'new', if the save fails.
精彩评论