代码之家  ›  专栏  ›  技术社区  ›  Espen

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

  •  77
  • Espen  · 技术社区  · 16 年前

    我的主页(或欢迎页面)将由两个模型的数据组成(我们称之为作者和帖子)。我对Rails还不太熟悉,不知道实现这一点的最佳方法是什么。

    我是否应该创建一个名为welcome的新控制器,它从作者和文章中收集数据,然后在welcome index视图中显示这些数据?或者我应该在同样从作者那里获得数据的post模型下有一个受欢迎的视图吗?或者其他方法来完成这个?

    我了解如何在技术上做到这一切,但不确定使用Rails框架的最佳实践方法是什么。

    7 回复  |  直到 11 年前
        1
  •  51
  •   Robert K    16 年前

    问题是,你的主页只是一个登陆页还是一组页面?如果它只是一个登陆页面,你不会期望你的用户在那里停留很长时间,除非去其他地方。如果它是一组页面,或者类似于现有的组,那么您可以向它最类似的控制器添加一个操作。

    我为当前项目所做的是创建一个名为 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
  •  117
  •   user664833 Ronen Rabinovici    11 年前

    似乎没有一个最佳实践。

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

    rails generate controller Welcome index
    

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

    还记得删除 public/index.html 在轨道上 <四 .

    (2) 这个 official Ruby on Rails routing guide 使用 PagesController . 它实际上表明 pages#main 不过,对我来说,这样做更有意义 pages#home (因为“主页”是无处不在的术语/概念)。此外,此控制器还可以处理其他 面向页面 行为如 pages#about , pages#contact , pages#terms , pages#privacy 等。

    (3) 这个 Ruby on Rails Tutorial 伴随着 static_pages#home static_pages#help 等等,尽管我不喜欢用“static”来表示这个控制器。这些页面仍然可能有一些动态的方面,特别是主页!

    (4) 尽管它没有讨论如何处理 主页 , RailsCast #117 on Semi-Static Pages 提出了另一套方法 显示 -只有资源。

    我喜欢1和/或2。在“和”方案中,您可以使用“欢迎”索引和“关于”页面等,而在“或”方案中,您可以使用“主页”、“关于”页面等。如果强制选择,我会选择选项2,因为您的代码较少。顺便说一句,除了“静态”这个词,2和3几乎是相同的。

        3
  •  28
  •   John    16 年前

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

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

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

    控制器的目的是准备您需要显示的数据集,而不管使用什么模型来存储这些数据。

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

    换句话说,控制器/视图组合永远不会“在”特定模型下。他们使用模型,但在任何层次关系中都不在模型之下。事实上,他们是 同龄人 不管他们用什么型号。

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

    Ruby脚本/生成scaffold模型控制器

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

    希望这有帮助。

    ——约翰

        4
  •  11
  •   allesklar    16 年前

    最佳实践是你的第一个建议。创建一个“欢迎”控制器,从您想要的任何型号调用记录。将根路由点指向该控制器。非常干净和合适。

        5
  •  9
  •   irakli    13 年前

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

    root :to => "welcome#index"
    

    删除public/index.html.erb。

    请注意,欢迎索引对应于WelcomeController中的索引操作,Wicked Flea的答案中的代码如下:

    class WelcomeController < ApplicationController
      def index
        @posts = Posts.find(:all, :limit => 10, :order => 'date_posted', :include => :user)
      end
    end
    
        6
  •  9
  •   Naoise Golden    12 年前

    此答案适用于Rails 3.2.1。

    首先为页面设置控制器,例如命名 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 / 转到您在刚刚创建的视图文件中放置的任何内容。

        7
  •  6
  •   Mike Woodhouse    16 年前

    尽可能适当地创建一个名为的新控制器。总结控制器?启动控制器?每日首页控制器?你会有个主意的。

    不仅如此,我会认真考虑创建一个新的模型, 基于ActiveRecord,从作者和文章模型(或其真实名称)收集信息,以便在视图中显示。另一种选择是在控制器中组装数据,这几乎肯定会很混乱——每次我都尝试它,而且我尝试了很多。一个单独的模型最终看起来要整洁得多。

    如果处理相对简单,为什么不先在控制器中构建数据,然后将输出包装在一个结构中,然后用一个真正的类替换该结构,并将该结构移到那里,一路重构。它不应该增加太多的总时间(大部分代码可以重用),您将了解什么最适合您。