我使用嵌套资源,为了制作新的Round
,您需要拥有Case
的ID,因此我的routes.rb
包含以下内容:
resources :cases do
resources :rounds
end
因此,当用户点击“新一轮”时,在主页上的按钮,它首先将它们引导到一个页面,在这个页面中,他们可以选择一个圆形所属的案例,然后重定向到圆形表格。
对于pick_case视图,我有以下内容:
<%= form_tag new_case_round_path, method: :get do |f| %>
<%= f.select_tag :case_id,
options_for_select(Case.all.collect { |c| [c.title, c.id] }),
class: "chosen-select" %><br/>
<%= f.submit_tag "Create round", class: "btn btn-primary" %>
<% end %>
但是,rails强迫我在new_case_round_path中命名一个case_id,所以在加载pick_case视图之前它给了我这个错误:
No route matches {:action=>"new", :controller=>"rounds"} missing required keys: [:case_id]
如何在表格中输入路线所需的信息时,如何引用表格需要提交的路线?
答案 0 :(得分:0)
没有路由匹配{:action =&gt;“new”,:controller =&gt;“rounds”}缺失 必需的密钥:[:case_id]
错误清楚地表明case_id
缺失。 Rails期望case_id
出现,因为您正在创建 新案例实例 ,因此无法在您的情况下提供。
解决问题的一种方法是使用Shallow Nesting为 新案例提供 路径 强>
resources :cases do
resources :rounds, shallow :true
end
现在,当您运行rake routes
时,您将找到新案例的路线,如下所示
new_case GET /cases/new(.:format) cases#new
因此,在pick_case
视图中,您可以将form
更改为
<%= form_tag new_case_path, method: :get do |f| %>
<%= f.select_tag :case_id,
options_for_select(Case.all.collect { |c| [c.title, c.id] }),
class: "chosen-select" %><br/>
<%= f.submit_tag "Create round", class: "btn btn-primary" %>
<% end %>
在重定向到 圆形 之前先创建 案例
答案 1 :(得分:0)
对于答案有点解决方法,我觉得可能有更优雅的方式。我将post 'get_case' => rounds#get_case
添加到routes.rb
我把它添加到我的回合控制器中:
def get_case
id = params[:case_id]
if id
redirect_to new_case_round_path(case_id: id)
else
flash[:danger] = "An error occured. Please try again"
redirect_to pick_case_path
end
end
这是我的新pick_case视图:
<%= form_tag get_case_path do %>
<%= select_tag :case_id,
options_for_select(map_with_id(Case, :title)),
class: "chosen-select" %><br/>
<%= submit_tag "Create round", class: "btn btn-primary" %>
<% end %>