Ruby on Rails中的欢迎/主页 - 最佳实践

时间:2008-12-08 14:40:16

标签: ruby-on-rails ruby

我的主页(或欢迎页面)将包含两个模型的数据(我们称之为作者和帖子)。我是rails的新手,并不确定实现这一目标的最佳方法是什么。

我应该创建一个名为welcome的新控制器,它从作者和帖子中收集数据,然后在欢迎索引视图中显示它们吗?或者我应该在帖子模型下有一个欢迎视图,它也可以从作者那里获取数据?或者以其他方式实现这一目标?

我理解如何在技术上完成所有这些操作,但只是不确定使用rails框架的最佳实践方法是什么。

7 个答案:

答案 0 :(得分:119)

似乎没有一种最佳做法。

(1)标准config/routes.rb文件似乎建议根页(或主页/欢迎页面)应由welcome#index处理。如果您受到指导,那么要生成相应的welcome#index控制器/操作,您可以使用以下命令:

rails generate controller Welcome index

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

另请记住在Rails public/index.html中删除< 4

(2) official Ruby on Rails routing guide使用PagesController。它实际上建议pages#main,虽然对我来说更合理的是pages#home(因为“主页”是无处不在的术语/概念)。此外,此控制器还可以处理其他面向页面的操作,例如pages#aboutpages#contactpages#termspages#privacy等。

(3) Ruby on Rails Tutorialstatic_pages#homestatic_pages#help等等,虽然我不喜欢用此表示此控制器的想法“静态的”。这些页面仍然可能会有一些动态方面,尤其是主页!

(4)虽然它没有讨论如何处理主页,但RailsCast #117 on Semi-Static Pages建议另外一套显示的方法> - 只有资源。

我觉得偏向于1和/或2.使用“和”方案,您可以使用welcome #index和pages#about等,而使用“或”方案,您可以使用页面#home,pages #about等。如果被迫选择,我会选择2,因为你最终会得到更少的代码。除了“静态”这个词之外,顺便说一下,2和3几乎是一样的。

答案 1 :(得分:51)

问题是,您的主页只是一个目标网页还是一组网页?如果它只是一个目标网页,您不希望您的用户长时间在那里闲逛,除非去其他地方。如果它是一组页面,或类似于现有组,您可以向控制器添加最喜欢的操作。

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

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

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

在我的情况下,这将是:

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

如果您愿意,可以为此主页创建一个控制器。我称之为主要内容,或者您​​可以记住与主页相关的内容。从那里,您可以获取数据和模型,并按照输出视图。

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

假设您正确定义了模型关系,那么匹配它的模板将非常简单。

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

答案 2 :(得分:28)

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

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

也就是说,特定的控制器/视图组合可以与生成该特定页面所需的模型一起使用。

控制器的目的是准备您需要显示的数据集,而不管用于存储该数据的模型。

视图的目的是以最恰当的方式显示数据。

换句话说,控制器/视图组合永远不会在特定模型下“。他们使用模型,但在任​​何层次关系中都不属于它们。事实上,无论他们使用什么模型,他们都是同行

我认为混淆来自AWDR和其他介绍性文本中的脚手架生成器示例,例如:

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

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

希望这有帮助。

- 约翰

答案 3 :(得分:11)

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

答案 4 :(得分:9)

请注意,在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

答案 5 :(得分:9)

此答案与Rails 3.2.1相同。

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

$ rails generate controller static

在档案app/controllers/static_controller.rb中:

class StaticController < ApplicationController
    def index       
    end
end

创建新的查看文件app/views/index.html.erb

最后配置您的config/routes.rb

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

这会使/home/转到你刚刚创建的View文件中的任何内容。

答案 6 :(得分:6)

尽可能正确地创建一个名为的新控制器。 SummaryController? StartController? DailyFrontPageController?你会有一个想法。

不仅如此,我还要认真考虑创建一个新的模型,基于ActiveRecord,从您的作者和帖子模型(或其真实姓名)收集信息,以便在你的看法。另一种方法是在控制器中组装数据,这几乎肯定会很混乱 - 每当我尝试它时,我都尝试了很多。一个单独的模型似乎最终更加整洁。

如果处理相对简单,为什么不首先尝试在控制器中构建数据,然后将输出包装在Struct中,然后用实际类替换Struct并在那里移动构造,一直重构。它不应该增加太多时间(大部分代码可以重复使用),你会很好地了解什么最适合你。