ruby-on-rails – Rails路由与:name而不是:id url参数

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – Rails路由与:name而不是:id url参数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个名为“公司”的控制器,而不是每个公司的URL被表示为:id我想要使用他们的名称:url / company / microsoft而不是url / company / 3.

在我的控制器中,我假设我会拥有

def show
   @company = Company.find(params[:name])
 end

因为url中不会有任何其他参数,我希望rails会明白:name引用了我公司模型中的:name列.我假设这里的魔法将在路线上,但是在这一点上我坚持不懈.

解决方法

PARAMS

底线是你正在看错误解决方案 – params哈希键是相当无关紧要的,你需要能够更有效地使用它们中包含的数据.

您的路线将构建为:

#config/routes.rb
resources :controller #-> domain.com/controller/:id

这意味着如果您请求此路由:domain.com/controller/your_resource,params [:id]哈希值将是your_resource(无论如果它被称为params [:name]或params [:id])

friendly_id

您有几个建议friendly_id的答案的原因是因为这将覆盖ActiveRecord的查找方法,允许您在查询中使用slug

#app/models/model.rb
Class Model < ActiveRecord::Base
  extend FriendlyId
  friendly_id :name,use: [:slugged,:finders]
end

这可以让你这样做:

#app/controllers/your_controller.rb
def show
    @model = Model.find params[:id] #-> this can be the "name" of your record,or "id"
end

猜你在找的Ruby相关文章