如何在routes.rb中调用get方法实际创建命名路由

时间:2017-11-20 06:16:44

标签: ruby-on-rails

在rails routes.rb文件中,假设我添加了代码

get "/articles" => "A#B", as: "arts"

然后只需包含代码

as: "arts"

如何创建“arts_path”方法以及在哪个文件中创建?

4 个答案:

答案 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中定义的方法,方法签名为Bas关键字只是命名路线。

例如,您可能有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)

路由在ActionDispatch模块的Rails库代码中创建。

您可以在方法addadd route中阅读GutHub存储库中的代码。