ruby-on-rails - 用:name代替:id url参数的Rails路由

标签 ruby-on-rails routes

我有一个名为“companies”的 Controller ,而不是每个公司的网址都用:id表示,我希望该网址使用其:name,例如:url/company/microsoft而不是url/company/3

在我的 Controller 中,我假设我会

 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_resourceparams[:id]哈希值将为your_resource(无论它是params[:name]还是params[:id]都无关紧要)

-

friendly_id

推荐friendly_id的答案有几个,是因为它覆盖了findActiveRecord方法,允许您在查询中使用 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-on-rails - 用:name代替:id url参数的Rails路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24226378/

相关文章:

ruby-on-rails - 两个日期之间的天数和小时数之间的精确差异

ruby-on-rails - 为什么 Rails 在启动时预加载它的所有依赖项(gems)?

javascript - Angular js - 显示/隐藏每个新路线的加载 gif

c# - MVC 4 - 路由到非区域 Controller 的问题

node.js - 正确处理匹配两个路由的 URL

laravel - 将 'auth' 中间件与子域一起使用

ruby-on-rails - rails : how do i access a method in my application controller?

ruby-on-rails - 如何在simple_form数字字段中指定小数精度(Rails)

ruby-on-rails - `method_missing' : undefined method `mail' for Emailer:Class (NoMethodError)

ruby-on-rails - rails 3 命名空间 Controller 和路由