我有一个名为“公司”的控制器,而不是每个公司的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的答案的原因是因为这将覆盖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