我知道,三重嵌套被忽略了,但是我试图弄清楚如何正确地创建此表单,而被困住了。我有一个主题为has_many的模型,其中有has_many个引用。我收到一条错误消息,说没有路线匹配。
路由设置如下:
resources :topics do
resources :questions do
resources :citations
end
end
所有模型都已使用has_many / belongs_to关联正确设置。一切在主题和问题之间都能正常工作。
我使用以下内容(尝试)创建新的引文:
<%= link_to "Add a citation", new_topic_question_citation_path(@topic, @question.id) %>
,然后使用以下内容构建表单:
<%= simple_form_for @citation, url: topic_question_citation_path(@topic.id, @question.id) do |f| ... %>
但是我在表单上遇到以下错误:
No route matches {:action=>"show", :topic_id=>6, :controller=>"citations",
:question_id=>84}, missing required keys: [:id]
在同一页面上,显示:
Request
Parameters:
{"topic_id"=>"topic1", "question_id"=>"84"}
对于我的citation_controller,我有:
class CitationsController < ApplicationController
def create
@topic = Topic.find(params[:topic_id])
@question = @topic.questions.find(params[:question_id])
@citation = @question.citations.new(citation_params)
@citation.user = current_user
if @citation.save!
flash[:notice] = "Your submission has been accepted and will be reviewed by a moderator."
redirect_to topic_question_path(@topic, @question.id)
else
render :new
end
end
def new
@citation = Citation.new
@topic = Topic.find(params[:topic_id])
@question = Question.find(params[:question_id])
end
def index
@citations = Citation.all
end
def show
authorize! :read, @citation
end
...
end
此格式适用于我的所有其他嵌套两个深度的模型。这里出了什么问题,我该如何解决?
答案 0 :(得分:0)
没有路线匹配{:action =>“ show”,:topic_id => 6, :controller =>“ citations”,:question_id => 84},缺少必需的键: [:id]
用于创建citations
的 路径助手 应该是topic_question_citations_path
而不是topic_question_citation_path
。注意更改citations
而不是citation
。
进行此更改以纠正错误
<%= simple_form_for @citation, url: topic_question_citations_path(@topic.id, @question.id) do |f| ... %>
OR
它可以简单地写为
<%= simple_form_for [@topic, @question, @citation] do |f| %>
提示:
始终运行rake routes
来查看 可用的路径助手 。每个路径助手将被映射到特定的controller#action
。因此,您可以通过将受尊重的可用路径助手与您正在使用的助手进行比较来解决此类错误。