繁体   English   中英

route.rb和控制器

[英]routes.rb and controller

抱歉,我以为我了解这一点,但是现在我必须重新评估对route.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甚至不看控制器吗? 是否直接进入“查看”文件? 谢谢你的帮助。

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

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

我这样想:请求首先经过路由,然后到达有问题的资源的控制器,该控制器从application_controller继承,然后根据需要查询模型,根据需要计算变量,然后将其用于编译查看页面(即编译页面)以HTML格式发送。

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

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

在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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM