ruby-on-rails - Rails - 三重嵌套路线上的 simple_form_for
问题描述
我知道,三重嵌套被看不起,但我试图弄清楚如何正确创建这个表单,但我被困住了。我有一个模型主题,其中有_many 问题,其中有_many Citations。我收到一条错误消息,提示没有路线匹配。
路由设置如下:
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
这种格式适用于我所有其他嵌套两层的模型。这里出了什么问题,我该如何解决?
解决方案
没有路线匹配 {: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| ... %>
或者
它可以简单地写成
<%= simple_form_for [@topic, @question, @citation] do |f| %>
暗示:
始终运行rake routes
以查看可用的路径助手。每个路径助手都将映射到某个controller#action
. 因此,您可以通过将受人尊敬的可用路径助手与您正在使用的路径助手进行比较来修复此类错误。
推荐阅读
- ios - 如何使用 UITableView indexPath(带节)更新数据源数组(不带节)?
- spring-boot - Spring 启动 Spring 数据 mySql
- html - 提交按钮在悬停时不改变颜色
- java - 具有泛型类型的 ViewModel
- servlets - JavaEE servlet setAttribute 有什么用
- sql - 从同一个表中复制行并使用不同的 ID 列和另一列进行更新
- arrays - 用户在一行中输入命令和 int 以及如何验证他们是否放置了正确的命令
- spring - 为什么我的 JdbcTokenStore 存储序列化 Java 对象?
- git - 如何使用 Git 进行部署 - 远程存储库未被识别为 Git 库
- java - cucumber-jvm 版本 3 替代设计模式用于简单表映射
手术