【问题标题】:ruby on rails: path and URL helpers don't work with singular namesruby on rails:路径和 URL 助手不适用于单数名称
【发布时间】:2017-08-23 09:49:48
【问题描述】:

我是 Ruby on Rails 的新手,我正在尝试创建我的第一个应用程序。我正在使用资源丰富的路线,例如“主题”:

resource :subjects do
    member do
      get :delete
    end
end

我已经为它的方法创建了控制器 SubjectsController 和视图。在索引视图中,我正在尝试创建一个链接来显示这样的视图:

link_to("Show", subject_path(1))

但它返回错误:

undefined method `subject_path' for #<#<Class:0x007fc820551488>:0x007fc8229468c0>
Did you mean?  subjects_path

助手“new_subject_path”也是如此。但是什么奇怪的 new_subjects_path 不会给出任何错误并创建正确的链接。我的应用有什么问题?我应该为路径助手使用复数吗???

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    我相信您的问题是因为您使用的是 resource 单数,而您的意思是使用 resources 复数版本。尝试将路线更改为:

    resources :subjects do
      member do
        get :delete
      end
    end
    

    你应该会发现你得到了预期的 rails url helper 方法。

    约定是当您期望存在多个资源项目时,使用复数版本resources :subjects,但是当您期望仅存在单个实体时使用单数resource :subject,这将创建不同的路由和助手不需要id 参数。

    【讨论】:

    • 谢谢!!!是的,你是对的,我的意思是资源。对于新手来说差异确实很小,但是您的回答清除了一切。
    • 太好了!如果它有帮助,也许会给它一个赞成票?也许选择首先发布的答案,而不是在大声笑之后复制它的答案。但主要是你的问题解决了!祝你好运,编码愉快!
    • 很遗憾我还不能投票,我的声望不够。无论如何感谢您的帮助
    【解决方案2】:

    如果您想要单一资源,请将:subjects 更改为:subject

    resource :subject do
      member do
        get :delete
      end
    end
    

    或者使用完整的resources 而不是resource

    resources :subjects do
      member do
        get :delete
      end
    end
    

    通过任一更改,您都可以使用subject_path 助手。但是对于第一个,您不能传递 ID。如果需要,请使用第二个。

    【讨论】:

    • 谢谢,有帮助!!我真正的意思是资源而不是资源。愚蠢的拼写错误
    猜你喜欢
    • 1970-01-01
    • 2015-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-27
    • 2021-01-11
    相关资源
    最近更新 更多