欢迎/ Ruby on Rails主页 – 最佳实践

我的主页(或欢迎页面)将由两个模型的数据组成(让我们称它们为作者和post)。 我是新来的铁轨,不知道什么是最好的方式来实现这一目标。

我应该创build一个名为welcome的新控制器,它从作者和post收集数据,然后将其显示在欢迎索引视图中? 或者我应该有一个受欢迎的观点下的模型,也从作者的数据? 或者任何其他方式来完成这个?

我明白如何在技术上做到这一点,但只是不确定使用rails框架的最佳实践方法是什么。

问题是,你的主页只是一个登陆页面,或将它是一组页面? 如果这只是一个登陆页面,你不会指望你的用户长时间呆在那里,除非去其他地方。 如果它是一组页面,或与现有组类似,则可以将操作添加到控制器中。

我为我当前的项目所做的是使一个名为Static的控制器,因为我需要3个静态页面。 主页是其中之一,因为除了去其他地方之外,没有什么可以看到或做的。

要映射默认路由,请在routes.rb使用以下routes.rb

 # Place at the end of the routing! map.root :controller => 'MyController', :action => :index 

在我的情况下,这将是:

 map.root :controller => 'static', :action => :index 

如果你愿意的话,你可以为这个主页创build一个控制器。 我会把它称为主要的,或者你可以记住的与主页相关的东西。 从那里你可以得到你的数据和你的模型,并推迟到输出视图。

 class MainController < ApplicationController def index @posts = Posts.find(:all, :limit => 10, :order => 'date_posted', :include => :user) end end 

假设你有正确的模型关系定义,匹配它的模板将是非常简单的。

祝你好运,希望这会有帮助。

似乎没有一个最好的做法。

(1)标准的config/routes.rb文件似乎build议根页面(或家庭/欢迎页面)应该由welcome#index来处理。 如果你被引导,那么为了生成相应的welcome#index controller / action,你可以使用下面的命令:

 rails generate controller Welcome index 

然后,在config/routes.rb ,你可以删除生成器自动添加的GET路由( get "welcome/index" ),并将根路由root 'welcome#index' (或root :to => 'welcome#index'在Rails < 4 )顶部的文件,因为它可能是你最受欢迎的路线,应该首先匹配。

还要记得删除Rails < 4 public/index.html

(2) 官方Ruby on Rails路由指南使用PagesController 。 它实际上build议pages#main ,但对我来说,更有意义的去与pages#home (因为“主页”是无处不在的术语/概念)。 此外,此控制器还可以处理其他面向页面的操作,例如pages#about pages#contact pages#terms pages#privacy等。

(3) Ruby on Rails教程 ,用static_pages#homestatic_pages#help等等,虽然我不喜欢用“static”来表示这个控制器的想法。 这些网页仍然可能有一些dynamic的方面给他们,特别是网页!

(4)虽然没有讨论如何处理主页 , 但Semi-Static Pages上的RailsCast#117还是提供了另外一种显示资源的方法。

我觉得对1和/或2的偏好。对于“和”场景,你可以使用欢迎#索引和页面#关于等等,而对于“或”场景,你可以使用pages#home,pages#等如果被迫select,我会select2,只是因为你最终代码less。 顺便说一下,2和3几乎是相同的,除了“静态”一词。

当我第一次开始Rails时,我问自己这样的事情。 这是你需要知道的:

  • 模型不一定与控制器和视图直接相关。

也就是说,一个特定的控制器/视图组合可以与您需要生成特定页面的多个模型一起工作。

控制器的目的是准备你需要显示的数据集,而不pipe用什么模型来存储数据。

该视图的目的是以最合适的方式显示该数据。

换句话说,控制器/视图组合从来不会在特定的模型下面。 他们使用模型,但不在任何层次关系下。 事实上,他们与他们使用的任何模型都是同等的

我觉得困惑来自AWDR和其他介绍性文章中的脚手架生成器示例,例如:

ruby脚本/生成脚手架模型控制器

我知道模型和控制器/视图之间的这种隐含关系让我困惑了一下。 但没有严格的关系,真的。 如果有的话,那么做MVC方法的任何事情都是非常困难的。 显然,事实并非如此。

希望这可以帮助。

– 约翰

最好的做法是你的第一个build议。 创build一个“欢迎”控制器,并从你想要的任何模型调用logging。 有一个根路由指向该控制器。 非常干净和适当。

请注意,在Rails3中,正确的方法是在routes.rb文件的末尾添加以下行:

 root :to => "welcome#index" 

并删除public / index.html.erb。

还请注意,welcome#index对应于WelcomeController中的索引操作,而The Wicked Flea的答案中的代码如下所示:

 class WelcomeController < ApplicationController def index @posts = Posts.find(:all, :limit => 10, :order => 'date_posted', :include => :user) end end 

这个答案是Rails 3.2.1的。

首先为页面设置一个Controller,例如static

 $ rails generate controller static 

在文件app/controllers/static_controller.rb

 class StaticController < ApplicationController def index end end 

创build新的视图文件app/views/index.html.erb

最后configuration你的config/routes.rb

 MyApp::Application.routes.draw do match 'home', :to => "static#index" root :to => "static#index" end 

这将使/home/去你刚才创build的View文件中的任何东西。

尽可能创build一个名为“适当”的新控制器。 SummaryController? StartController? DailyFrontPageController? 你会有一个想法。

不仅如此,我会认真考虑创build一个新的模型, 而不是基于ActiveRecord的,从您的视图中收集您的作者和发布模型(或其真实姓名)的信息。 另一种方法是在控制器中组装数据,这几乎肯定会是一团糟 – 我每次尝试它时,都会尝试很多。 一个单独的模型似乎结束了很多整齐。

如果处理相对简单,那么为什么不先在控制器中build立数据,然后将输出封装在Struct中,然后用一个真实的类replaceStruct,然后在那里移动构造,一路重构。 它不应该在总时间内添加太多(大部分代码都可以重用),您将会很好地了解哪种方法最适合您。