routes.rb和控制器

时间:2013-03-18 00:06:57

标签: ruby-on-rails controller

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

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

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

 root :to => 'static_pages#FAQ'

直到最近我才想到发生了什么:routes.rb正在查看我的static_pages_controller.rb文件,查看FAQ方法,然后看看该怎么做。如果FAQ方法中没有任何内容 - 就像这样 - 那么Rails会发挥其魔力并转到我的View中的FAQ.html.erb,这是最接近的东西。

但即使我改名:

def FAQ
end

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

3 个答案:

答案 0 :(得分:0)

首先提供

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

另外“浏览器请求进入应用程序控制器,控制器告诉显示什么,对吧? - 什么erb文件,数据库内容,等等......”

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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

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

def faq
   Rails.logger.warn "faq method did get called after all"
end