Ruby on rails routes.rb和controller

Ruby on rails routes.rb和controller,ruby-on-rails,controller,Ruby On Rails,Controller,抱歉,我以为我理解了这一点,但现在我必须重新评估我对routes.rb的理解。希望你能帮忙 浏览器请求发送到应用程序控制器,控制器告诉您要显示什么,对吗什么erb文件,数据库之类的 在我的routes.rb文件中,我有: root :to => 'static_pages#FAQ' 直到最近,我还以为发生了什么:routes.rb正在查看我的static_pages_controller.rb文件,查看FAQ方法,然后看看该怎么做。如果FAQ方法中没有任何内容,那么Rails就发挥了它

抱歉,我以为我理解了这一点,但现在我必须重新评估我对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

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

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

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


我是这样想的:请求首先经过路由,然后到达相关资源的控制器,从应用程序\u控制器继承的控制器将根据需要查询模型,根据需要计算变量,然后在编译视图页面时使用这些变量,以HTML格式发送。

您的想法基本正确;Rails将尝试呈现静态页面控制器的FAQ方法,如果操作没有显式呈现视图(或其他输出),该方法将隐式呈现“FAQ”视图


您缺少的是,如果缺少任何一个控制器/动作部件,Rails将填补空白。您所需要做的就是定义视图,Rails将假定您不必费心定义一个空操作。

在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

您是否有问题/错误,或者您只是对内部结构感到好奇?正如我在上面的最后几个问题中所述。您好,谢谢。但作为我在控制器中尝试的一个测试:'def FAQ将“此处某物”置于“结束”…我以为我会在视图中看到“此处某物”,但什么都没有。我做错什么了吗?
put
打印到日志文件,而不是视图。您不能通过控制器中的
put
写入浏览器。必须渲染或重定向。