在rails routes.rb文件中,假设我添加了代码
get "/articles" => "A#B", as: "arts"
然后只需包含代码
as: "arts"
如何创建“arts_path”方法以及在哪个文件中创建?
答案 0 :(得分:1)
我会回答""。这被称为"元编程"。编写代码的代码。这是一个如何实现的简化示例。
get
是一种简单地调用define_method
的方法(直接或通过几个间接级别)。
module Routable
def get(resource, as: nil)
method_name = "#{as || resource.to_s}_path"
define_method(method_name) do
"/#{resource}"
end
end
end
class Routes
extend Routable
get :products
get :users, as: :customers
end
routes = Routes.new
routes.respond_to?(:users_path) # => false
routes.respond_to?(:customers_path) # => true
routes.respond_to?(:products_path) # => true
routes.customers_path # => "/users"
对于" 实际正在发生的事情",欢迎您仔细阅读“#”;'代码,现在您知道要查找什么。
答案 1 :(得分:0)
通常,在rails中,您的路由将映射到控制器方法。
您正在做的是将路线设置为GET,可通过端点/articles
访问。
您将此设置为映射到控制器A
中定义的方法,方法签名为B
。 as
关键字只是命名路线。
例如,您可能有config/routes.rb
get "/articles" => "arts#articles", as: "arts"
哪个会将/articles
GET请求指向控制器中定义的方法articles
:
/app/controllers/arts_controller.rb
我不确定你的意思:
然后只需包含代码
as: "arts"
我希望这会有所帮助。
答案 2 :(得分:0)
Prefix Verb URI Pattern Controller#Action Named Helper
articles GET /articles(.:format) articles#index articles_path or articles_url
像文章这样的前缀是路径助手,因此命名的助手是articles_path或articles_url。
底线是当您调用link_to或form_tag等帮助程序时 - 它们将需要路径来填充应用程序路由结构中的不同操作。
由于Rails赞成约定优于配置& DRY编程,这意味着如果您可以使用标准网址引用这些路径助手,它将允许您制作一个参考&根据需要获得路线
例如:
每次调用articles_path都比引用/ articles更强大
前缀允许您在控制器和视图中使用articles_path或articles_url等快捷方式。在执行将用户重定向到特定页面或生成动态链接等操作时,这些功能非常方便。
要自定义路径助手,您可以更改路径文件中的引用,如下所示:
GET '/articles', to: 'articles#index', as: 'all_articles'
这会将前缀更改为 all_articles_path 而不是articles_path
这允许您定义自定义路径/路径助手,允许您根据需要调用它们
答案 3 :(得分:0)