ruby-on-rails - 覆盖 Rails 默认路由助手

标签 ruby-on-rails ruby ruby-on-rails-3

我正在编写一个应用程序,我需要覆盖模型的默认路由助手。因此,如果我有一个名为 Model 的模型,以及相应的帮助器 model_path() ,它会生成“/model/[id]”。我想覆盖该助手来生成“/something/[mo​​del.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/

相关文章:

ruby-on-rails - 带有 Rails 的 Wiki 功能?

ruby-on-rails - Rails - 搜索消息和对话。如何只显示每个对话的最新消息?

mysql - ruby mysql2 gem 安装错误

ruby-on-rails - 在Windows上安装Postgres以与Ruby-on-Rails一起使用

ruby-on-rails-3 - RSpec 和 Rails 3 - 简单测试失败

ruby-on-rails-3 - 将参数传递给 uploader /从 uploader 中访问模型的属性/让用户选择缩略图大小

ruby-on-rails - 使用 Ruby on Rails 在 postgres 中存储二进制对象

ruby - 如何在具有通配符的 RSpec 中请求(GET/POST)路由

Ruby 当前类

ruby - 如何在有和没有javascript的情况下运行 cucumber 场景避免代码重复