Rails 3 Render => New with Parameter

匿名 (未验证) 提交于 2019-12-03 10:24:21

问题:

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

回答1:

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.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!