ruby-on-rails – 如何全局覆盖rails url helper?
我需要在foo_path中添加一个简单的更改,所以我这样做了:
module ApplicationHelper # [...] def foo_path(foo,options = {}) options.merge!(bar: foo.some_attribute) super end # [...] end 现在,这在从视图调用时起作用,但是当从控制器调用时,使用没有添加的原始变体. 如何覆盖应用程序的相应帮助程序(_path / _url)? 解决方法
我认为最简单的方法是自定义routes.rb文件(至少对于静态默认参数).文件:
http://guides.rubyonrails.org/routing.html#customizing-resourceful-routes
默认参数示例: get "/foo(/:bar)" => "my_controller#index",defaults: { bar: "my_default" } 默认参数值示例范围: scope '/(:rec_type)',defaults: { rec_type: 'mammo' },rec_type: /mammo|face/ do resources :patients end 其他选项(用于动态限制): 高级路由约束: 如果您需要更高级/动态限制,请查看本指南:http://guides.rubyonrails.org/routing.html#advanced-constraints. 覆盖default_url_options: 此外,您可以覆盖default_url_options方法以使用路径助手自动添加一些属性(参数):http://guides.rubyonrails.org/action_controller_overview.html#default-url-options.
class ApplicationController < ActionController::Base def default_url_options(options = {}) if action_name == 'foo' # or other conditions options[:bar] = 'your_defaults' # add here your default attributes end options end end 覆盖to_param: Rails路由系统在模型上调用to_param以获取:id占位符的值. ActiveRecord :: Base#to_param返回模型的id,但您可以在模型中重新定义该方法.例如,给定: class Product < ActiveRecord::Base def to_param "#{id}-#{title}" end end 这会产生:/ products / 254-Foo (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |