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

vcirk6k6  于 2022-12-15  发布在  Ruby
关注(0)|答案(7)|浏览(141)

我的主页(或欢迎页面)将包含来自两个模型的数据(我们称之为authors和posts),我是rails的新手,不确定什么是实现这一点的最佳方法。
我是否应该创建一个名为welcome的新控制器,它收集作者和帖子的数据,然后在welcome索引视图中显示它们?或者我是否应该在post模型下创建一个welcome视图,它也从作者那里获取数据?或者用其他方法来实现这一点?
我理解如何在技术上完成所有这些工作,但只是不确定使用Rails框架的最佳实践方法是什么。

d4so4syb

d4so4syb1#

似乎没有一个最佳实践。

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

rails generate controller Welcome index

然后,在config/routes.rb中,您可以删除生成器自动添加的GET路由(get "welcome/index"),并将根路由root 'welcome#index'(或Rails < 4中的root :to => 'welcome#index')放在文件的顶部,因为它可能是您最常用的路由,应该首先进行匹配。
还记得删除Rails < 4中的public/index.html

**(2)**Ruby on Rails的官方路由指南使用PagesController,实际上建议使用pages#main,不过对我来说,使用pages#home更有意义(因为“主页”是普遍存在的术语/概念)。此外,该控制器可以处理其他 * 面向页面的 * 动作,诸如pages#aboutpages#contactpages#termspages#privacy等等。

rails generate controller Pages home

config/routes.rb中:

root 'pages#home'

**(3)**Ruby on Rails教程中有static_pages#homestatic_pages#help等,虽然我不喜欢用“static”来表示这个控制器,但这些页面仍然可能有一些动态的方面,特别是主页!
**(4)**尽管RailsCast #117 on Semi-Static Pages没有讨论如何处理 * 主页 *,但它提出了另一组 * 只显示 * 资源的方法。

我倾向于1和/或2。在“and”的情况下,你可以使用welcome#index和pages#about等,而在“or”的情况下,你可以使用pages#home,pages#about等。如果被迫选择,* 我会选择选项2*,因为你最终会得到更少的代码。顺便说一句,2和3几乎是一样的,除了单词“static”。

2izufjch

2izufjch2#

问题是,你的主页只是一个登录页面还是一组页面?如果它只是一个登录页面,你不希望你的用户在那里停留很长时间,除非去其他地方。如果它是一组页面,或者类似于一个现有的组,你可以添加一个动作到它最相似的控制器。
我为我当前的项目所做的是做一个名为Static的控制器,因为我需要3个静态页面,主页就是其中之一,因为除了去其他地方,没有什么可看或可做的。
要Map默认路由,请在routes.rb中使用以下命令:

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

在我的例子中,这将是:

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

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

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

假设您已经正确定义了模型关系,那么匹配它的模板将非常简单。
祝你好运,希望这对你有帮助。

chhqkbe1

chhqkbe13#

当我刚开始使用Rails的时候,我问过自己类似的问题。下面是你需要知道的:

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

也就是说,一个特定的控制器/视图组合可以与生成该特定页面所需的任意多个模型一起工作。
控制器的用途是准备您需要显示的数据集,而不管使用什么模型来存储该数据。
视图的目的是以最合适的方式显示数据。
换句话说,控制器/视图组合从来不在某个特定的模型之下。它们使用模型,但在任何层次关系中都不在模型之下。事实上,无论它们使用什么模型,它们都是同级
我认为混淆来自于AWDR和其他介绍性文本中的scaffold生成器示例,如:
ruby脚本/生成scaffold模型控制器
我知道模型和控制器/视图之间隐含的关系让我有点困惑。但是实际上并没有严格的关系。如果有,那么用MVC方法做任何复杂的事情都是非常困难的。很明显,事实并非如此。
希望这对你有帮助。
--约翰

nkoocmlb

nkoocmlb4#

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

t3irkdon

t3irkdon5#

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

root :to => "welcome#index"

并删除public/index.html。
还请注意,welcome#index对应于WelcomeController中的索引操作,来自Wicked Flea的答案的代码看起来像这样:

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

z3yyvxxp6#

此答案来自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/转到您在刚刚创建的视图文件中输入的内容。

qv7cva1a

qv7cva1a7#

创建一个名称尽可能恰当的新控制器。SummaryController?StartController?DailyFrontPageController?您会有一个想法。
不仅如此,我会认真考虑创建一个新的Model,* 而不是 * 基于ActiveRecord,从Author和Post模型中收集信息(或者不管它们真实的是什么)以便在你的视图中呈现。另一种选择是在控制器中组装数据,这几乎肯定会很混乱--这是我每次尝试的时候,而且我试了很多次,单独的型号最后似乎要整洁得多。
如果处理相对简单,为什么不尝试先在控制器中构建数据,然后将输出 Package 在Struct中,然后用一个真实的的类替换Struct,并将构造移动到那里,一路重构。这不会增加太多的总时间(大多数代码可以重用),而且你会很好地了解什么最适合你。

相关问题