【问题标题】:Named route in Rails 4Rails 4 中的命名路线
【发布时间】:2013-03-25 02:35:09
【问题描述】:

我正在测试应用程序中使用 Rails 4。我有一个不标准的任意 URL,例如 resources :foo 类型的 URL。理想情况下,我想要的最终结果是能够:

/contests/:id/enter

在视图中,如果我可以使用命名帮助器设置链接,那就太好了,例如:

edit_contests_enter(:id)?

定义上述路由的最佳方法是什么,以便我可以将辅助路径与上述任意 URL 一起使用?它不一定必须是 edit_contests_enter(:id),但只要帮助程序路径指向上面建议的 URL,那就太好了。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4


    【解决方案1】:

    我假设您的比赛是一种资源,当您的访问者访问/contests/:id/enter 时,您希望他们创建一个对象user <=> contest。我们就叫它participation吧。

    现在participation 与 Rails 应用程序中的任何其他资源完全一样,因此您的 routes.rb 文件看起来像

    resources :contests do 
      resources :participations
    end
    

    除了创建参与之外,您不希望人们做任何事情,例如编辑或销毁它们。也许你想要一个像/contests/:id/enter 这样的好URI。你所要做的就是

    resources :contests do 
      resources :participations, :only => [:new, :create]
      get "enter" => "participations#new"
    end
    

    这样做会给你一个名为contest_enter的路由助手。在您的participations#new 表单中,您将像往常一样将POST 发送至/contests/:id/participations

    【讨论】:

      【解决方案2】:

      如果你有一个resources 块用于:contests,你可以使用以下命令在 ContestsController 上定义一个新的“成员”路由:

      resources :contests do
        member do
          get :enter
        end
      end
      

      这会自动为您生成一个名为 member route 的名称,您可以通过运行 rake routes 找到它的名称。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-09
        • 1970-01-01
        • 1970-01-01
        • 2012-03-31
        • 1970-01-01
        • 2013-05-26
        相关资源
        最近更新 更多