我读过: 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 %>
感谢任何帮助。我已经圈了好几个小时了。
答案 0 :(得分:1)
我认为“创建”方法的else子句需要大致镜像您的“新”方法,这意味着再次从@category
哈希中填充params
。
首先确保填充了隐藏字段,然后在提交表单时检查params
的内容。 category_id
应该在那里,如果保存失败,您需要像在'new'中那样再次抓取它。