2

抱歉,我以为我理解了这一点,但现在我必须重新评估我对 routes.rb 的理解。希望你能帮忙。

浏览器请求发送到应用程序控制器,控制器告诉显示什么,对吧?- 什么 erb 文件,数据库的东西,随便什么……

在我的 routes.rb 文件中,我有:

 root :to => 'static_pages#FAQ'

直到最近我还以为发生了什么:routes.rb 正在查看我的 static_pages_controller.rb 文件,查看 FAQ 方法,然后查看要做什么。如果FAQ 方法中没有任何内容——就像这种情况一样——那么Rails 就会发挥它的魔力并在我的视图中访问我的FAQ.html.erb,这是最接近的东西。

但即使我更改名称:

def FAQ
end

在我的控制器中,或者完全删除 static_pages_controller.rb,它仍然会转到我的 FAQ.html.erb 文件。那么 routes.rb 甚至不看控制器吗?它会直接进入“查看”文件吗?谢谢你的帮助。

4

3 回答 3

0

以大写字母开头的方法名称在 ruby​​ 中似乎是一个非常糟糕的主意,因为 ruby​​ 会将任何以大写字母开头的标识符视为常量。我个人要做的第一件事就是在我的路由和控制器代码中将“FAQ”更改为“faq”。如果您真的想在浏览器 url 中大写“FAQ”,您可以通过以下方式实现:

root :to => static_pages#faq, :as => 'FAQ'

要检查您的方法是否被调用,请使用记录器:

def faq
   Rails.logger.warn "faq method did get called after all"
end
于 2013-03-18T02:59:44.690 回答
0

首先提供静态页面,这就是始终提供 FAQ.html.erb 的原因。

另外“浏览器请求发送到应用程序控制器,控制器告诉显示什么,对吗?-什么 erb 文件,数据库内容,等等……”

我是这样想的:请求首先通过路由,然后到有问题资源的控制器,控制器从 application_controller 继承,然后根据需要查询模型,根据需要计算变量,然后在编译时使用查看页面是编译,以 HTML 格式发送。

于 2013-03-18T00:22:37.363 回答
0

你的想法基本上是正确的;Rails 将尝试渲染 static_page 控制器的 FAQ 方法,如果该操作没有显式渲染视图(或其他输出),该方法会隐式渲染“FAQ”视图。

您缺少的是,如果缺少任何一个控制器/动作部件,Rails 将填补空白。您需要做的就是定义视图,Rails 会假设您根本不想定义一个空动作。

于 2013-03-18T00:23:11.787 回答