【问题标题】:Confused about routes setup -- Rails 3.1对路线设置感到困惑——Rails 3.1
【发布时间】:2011-12-30 12:14:48
【问题描述】:

我想我因为名字而遇到了冲突:

两种型号:storecoupon

显示优惠券所需的网址:http://localhost/coupons/:store_name(“优惠券”写在网址中,不替换任何内容)

控制器名称:coupons_controller

这是我现在的路线:

match '/coupons/:store_name' => 'coupons#index', :as => :stores

当我尝试在另一个控制器中执行 redirect stores_path(store) 时,我收到此错误:

No route matches {:controller=>"coupons"}

有什么线索吗?我是 Rails 新手,所以我敢打赌这是一个愚蠢的错误。

更新

是否有一个中心位置告诉动态 _path() 函数使用特定的 url 结构?即不必在任何地方执行以下操作:

redirect_to stores_path(:store_name => store.store_name)

只使用:

redirect_to stores_path(store)

【问题讨论】:

  • 只是在编辑完路由文件后重启了 Rails 服务器?
  • :) 我不知道它需要重新启动 - 但我现在遇到了另一个问题......生成的 url 就像 /coupons/1234 这是商店的 ID。调用函数时如何自动将其放入名称中?

标签: ruby-on-rails ruby-on-rails-3.1


【解决方案1】:

是的,您可以,在您的模型中重新定义 to_param

class Store < ...
  def to_param
    store_name
  end
end

【讨论】:

    【解决方案2】:
    redirect_to stores_path(:store_name => store)
    

    如果没有(现在无法确认)应该可以工作,你应该可以做(小技巧)

    redirect_to stores_path+"?store_name=yourstorename"
    

    以宁静的方式进行,您可能应该有这样的东西(在您的路线中):

    resources :stores do
      resources :coupons # this will give you e.g. /stores/:store_id/coupons for the coupons#index action
    end
    

    如果您想使用商店名称而不是 ID,只需搜索 SO 以使用“slug”或查看此处:getting a 'name' based URL in RESTful routes instead of an id based urlID + Slug name in URL in Rails (like in StackOverflow)

    【讨论】:

    • 这行得通,但有没有办法可以将其设置为标准(因此可以传入对象并告诉它在某处使用 store_name 而不是 store_id)?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-21
    • 2017-07-31
    • 2014-07-08
    相关资源
    最近更新 更多