我正在编写一个应用程序,我需要覆盖模型的默认路由助手。因此,如果我有一个名为 Model 的模型,以及相应的帮助器 model_path() ,它会生成“/model/[id]”。我想覆盖该助手来生成“/something/[model.name]”。我知道我可以在 View 助手中执行此操作,但是有没有办法在路由级别覆盖它?
最佳答案
您可以在模型上定义to_param
。它的返回值将在生成的 URL 中用作 id。
class Thing
def to_param
name
end
end
您可以像这样调整路线以调整资源范围
scope "/something" do
resources :things
end
或者,您也可以使用适用的子资源。
最后,您需要调整 Controller ,因为 Thing.find(params[:id])
显然无法工作。
class ThingsController < ApplicationController
def show
@thing = Thing.where(:name => params[:id).first
end
end
您可能想确保您的事物
的名称
是唯一的,因为如果不是,您会观察到奇怪的事情。
为了省去自己实现所有这些的麻烦,您可能还对 friendly_id 感兴趣。这给你这个和一些额外的行为(例如使用生成的段)
关于ruby-on-rails - 覆盖 Rails 默认路由助手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9738952/