我有一个名为“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_resource
,params[:id]
哈希值将为your_resource
(无论它是params[:name]
还是params[:id]
都无关紧要)-
friendly_id
推荐
friendly_id
的答案有几个,是因为它覆盖了find
的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-on-rails - 用:name代替:id url参数的Rails路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24226378/