【问题标题】:Rails Controller ActionRails 控制器动作
【发布时间】:2017-01-05 02:30:45
【问题描述】:

我想知道那些控制器默认操作是在哪里定义的。即使我不编写索引操作,也可以渲染索引视图!我曾经阅读过 Rails 源代码,但我可以得到方法声明的位置。我猜这些动作是由 routes.rb 知道的。任何人都知道我在哪里可以在 rails 源代码中找到它们。

【问题讨论】:

  • 我想你正在处理一个 RESTful 资源,所以 Rails 可以识别 URL 并知道你想要呈现一个索引操作。即使您没有定义索引操作,约定优于配置。为什么你需要知道这个?
  • 我需要知道 Rails 是如何处理这个问题的。
  • rails 之所以在控制器中渲染索引动作而没有索引动作是因为你声明了一个匹配它的路由(通常是resources :users)并且有一个索引模板要渲染。没有这两个,rails 会报错。

标签: ruby-on-rails


【解决方案1】:

你可以在rails/actionpack/lib/action_controller/metal/implicit_render.rb看到

def method_for_action(action_name)
  super || if template_exists?(action_name.to_s, _prefixes)
    "default_render"
  end
end

即使没有定义动作名称,当有模板时,Rails 也会调用默认渲染。

【讨论】:

  • 我需要知道动作是在哪里定义的,而不是模板渲染。
  • 动作未定义。从上面的方法体可以看出,即使我们没有写 index action,只要我们有 index 的视图模板,Rails 很乐意使用default_render 方法为我们渲染它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多