Rails 3 Render =>新参数

时间:2011-01-12 18:39:04

标签: forms ruby-on-rails-3 new-operator render

我读过: Rails: Pass parameters with render :action?,但我仍然遇到问题。

我的新网址是:http://localhost:3000/submit?category_id=2。第一次提交表单没有任何问题,但是如果创建失败并且控制器呈现新页面我得到错误找不到没有id的类别因为参数没有被传递。

这是new.html.erb和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

下面第1行给出了错误。

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

感谢任何帮助。我已经圈了好几个小时了。

1 个答案:

答案 0 :(得分:1)

我认为“创建”方法的else子句需要大致镜像您的“新”方法,这意味着再次从@category哈希中填充params

首先确保填充了隐藏字段,然后在提交表单时检查params的内容。 category_id应该在那里,如果保存失败,您需要像在'new'中那样再次抓取它。