【问题标题】:Rails 4 shallow nesting UrlGenerationError, missing required keysRails 4浅嵌套UrlGenerationError,缺少必需的键
【发布时间】:2015-01-14 04:06:50
【问题描述】:

我第一次尝试浅层嵌套资源,但我的索引路由遇到了一点问题。

routes.rb

resources :sites, shallow: true do
  resources :visits
end

我得到的错误出现在我的visits#show 页面的后退按钮中:

<%= link_to 'Back', site_visits_path(@site) %>

No route matches {:action=>"index", :controller=>"visits", :site_id=>nil} missing required keys: [:site_id]

在我的VisitsControllerindex 动作中,我设置@site 如下:

@site = Site.find(params[:site_id])

但是它说我的:site_id 为零,我不确定如何正确设置。

【问题讨论】:

    标签: ruby-on-rails nested-resources


    【解决方案1】:

    你可以这样设置:

    <%= link_to 'Back', site_visits_path(:site_id => @site.id) %>
    

    【讨论】:

    • 试一试,得到这个错误:undefined method 'id' for nil:NilClass 我认为我在控制器中设置@site 的方式必须以某种方式更改,因为我得到的错误是我的@987654324 @ 为零。 @site = Site.find(params[:site_id]) 在我使用完全深度嵌套时有效,但在这种浅嵌套情况下它似乎不起作用。感谢您的帮助,但如果没有其他问题,我会给您打勾,因为我还不能投票。
    • 我想通了。使用浅嵌套时,我的 URL 中没有 :site_id,因为页面位于 localhost:3000/visits/m,而不是通常的 localhost:3000/sites/n/visits/m。因此,在控制器的show 操作中,我首先设置@visit = Visit.find(params[:id]),然后设置@site = @visit.site 以返回与该站点相关的访问索引!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多