【问题标题】:Problem with custom routes in RailsRails 中的自定义路由问题
【发布时间】:2009-06-02 10:45:58
【问题描述】:

我在路线中有这条线:

map.resources :questions, :new => {:vote_for => :put, :vote_against => :put}, :has_many => :replies, :shallow => true

在我看来,我使用以下助手:

link_to 'OK', vote_for_question_path(@question), :method => :put link_to 'NO', vote_against_question_path(@question), :method => :put

但不幸的是,正如 Rails 所说,我的代码有问题:

用于#的未定义方法`vote_for_question_path'

怎么了?

【问题讨论】:

    标签: ruby-on-rails routes


    【解决方案1】:

    您的路由语法似乎有误。

    如果您想添加新的成员路由(即应用于单个资源实例的路由),那么您应该这样做:

    map.resources :questions,
                  :member => { :vote_for => :put, :vote_against => :put },
                  :has_many => :replies, :shallow => true
    

    另一方面,如果您想覆盖标准的“新”URL 段,则应为:

    map.resources :questions, :path_names => { :new => 'vote_for' },
                  :has_many => :replies, :shallow => true
    

    ——请注意,相应的控制器操作仍将命名为“new”。这将允许以下 URL:

    /questions/vote_for

    但是,看看您似乎想要做的事情,您可能需要考虑创建一个新的Vote 资源。这将在用户为问题投票时创建,并且符合标准 Rails 的 RESTful 路由约定。对一个问题进行投票可能会有一个类似以下的 URL:

    /questions/22/votes/new

    【讨论】:

    • 谢谢,它有效!我想使用 RESTful 约定(如您所建议的),但我不知道如何使用 /questions/22/votes/new 指定投票是 +1 还是 -1 :(
    • 在不了解您的应用程序的情况下很难为您提供指导。一般的想法是您的 Question 模型将与 Vote 模型相关联,而 Vote 模型可能与 User 模型相关联。当我用户对一个问题进行投票时,该 Vote 实例将被添加到该问题的投票集合中。对于 -1,它将被删除。
    猜你喜欢
    • 1970-01-01
    • 2016-12-26
    • 1970-01-01
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    相关资源
    最近更新 更多