Rails - 自定义资源路由

时间:2013-11-02 21:26:02

标签: ruby-on-rails ruby-on-rails-3

我正在尝试自定义我的节目路线...我不希望用户能够通过以下方式查看项目:id ...

我有一个销售模型,展示路线是:

sale GET    /sales/:id(.:format)     sales#show

但是,我不希望用户能够通过id查看销售,相反,我希望用户:

sale GET    /sales/:guid(.:format)     sales#show

guid是我在创建对象时生成的uuid:

def populate_guid
    self.guid = SecureRandom.uuid()
end

2 个答案:

答案 0 :(得分:10)

在config / routes.rb

get '/sales/:guid', to: 'sales#show'

或者如果你使用rails 4,你可以:

resources :sales, param: :guid

在控制器中

def show
  @sale = Sale.find(params[:guid])
end

答案 1 :(得分:1)

您可以在routes.rb中定义自定义路线:

get "/sales/:guid", :to => "sales#show"

然后在您的控制器中,对于show动作,您可以从网址中传递的guid找到您想要的促销:

def show
  @sale = Sale.find_by_guid(params[:guid])
end