gpt4 book ai didi

ruby-on-rails - 如何全局覆盖 rails url helper?

转载 作者:行者123 更新时间:2023-12-04 05:53:57 24 4
gpt4 key购买 nike

我需要对 添加一个简单的更改foo_path ,所以我这样做了:

module ApplicationHelper
# [...]

def foo_path(foo, options = {})
options.merge!(bar: foo.some_attribute)
super
end

# [...]
end

现在,这在从 View 调用时有效,但从 Controller 调用时,将使用没有我添加的原始变体。

如何在应用程序范围内覆盖相应的助手(_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 .

You can set global default parameters for URL generation by defining a method called default_url_options in your controller. Such a method must return a hash with the desired defaults, whose keys must be symbols:


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

关于ruby-on-rails - 如何全局覆盖 rails url helper?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28675193/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com