【问题标题】:Rendering a 'show' template with an additional parameter is causing a routing error使用附加参数呈现“显示”模板会导致路由错误
【发布时间】:2012-06-15 08:47:51
【问题描述】:

我有一个模板“groups/show.html.erb”我有一个链接,它通过将参数传递给控制器​​来呈现部分。然后控制器使用该参数来识别要进行哪个 JS 调用。

<%= link_to 'Add a Video', group_path(create_video: true), remote: true %>

然后在控制器中

elsif params[:create_video]
  @video = Group.find(params[:id]).videos.build
  respond_to do |format|
    format.js {render action: 'create_video'}
  end

这会调出一个部分表单,该表单使用 videos_controller 中的 create 方法创建视频。如果表单验证失败并且我尝试呈现“组/显示”,则会收到路由错误:

_create_video.html.erb

<%= form_for @video, :url => group_videos_path(@group) do |f| %>
    <%= f.text_field :name %>
    <%= f.submit %>
<% end %>

没有路线匹配 {:action=>"show", :controller=>"groups", :create_video=>true}

为了完成这项工作,我认为您可以在 routes.rb 中明确匹配它,但有更好的方法吗?非常感谢

【问题讨论】:

    标签: ruby-on-rails ajax ruby-on-rails-3 routing


    【解决方案1】:

    你忘了给哪个组,你通常应该做类似的事情

    group_path(@group, create_video: true)
    

    希望这会有所帮助。

    【讨论】:

    • 正确,谢谢。奇怪的是,我不需要在页面最初加载时指定哪个组,但我在渲染之后才指定。为什么会这样?
    • 不完全确定,但我也看到了。我认为如果没有给出参数,rails 会寻找@group instance-variable。如果您提供任何参数,它将使用该参数。我总是尽量明确,并指定要显示路径的对象。
    • 我不认为是这样,因为我没有指定@group,但仍然有一个参数,并且在模型验证之前它工作正常。我认为这与我正在从不同的控制器呈现“显示”有关,因此它对 URL 感到困惑,因此不会自动添加命名的 id。当我从渲染返回显示时,URL 变为 /groups/:id/videos,不知道为什么会这样。
    • @steve:我希望你不要指望我对你刚才所说的一切说些明智的话。我需要更多信息才能说些什么。 以前它可以从不同的控制器工作,但现在不行,并且 url 发生了变化。 我需要查看代码才能为您提供帮助。 当我从渲染返回显示时:那是什么?您是否单击视图中的反向链接,您是否单击视图中的链接?视图是否正确渲染?控制器是重定向你还是链接错误?
    • 是的,抱歉,这不是最好的写法:) 我想我会就此提出一个单独的问题。
    猜你喜欢
    • 2019-04-07
    • 2016-08-28
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多