Rails 3 Render => New with Parameter

六月ゝ 毕业季﹏ 提交于 2019-12-01 08:08:07

问题


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.



来源:https://stackoverflow.com/questions/4672585/rails-3-render-new-with-parameter

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