我的主页(或欢迎页面)将包含来自两个模型的数据(我们称之为authors和posts),我是rails的新手,不确定什么是实现这一点的最佳方法。
我是否应该创建一个名为welcome的新控制器,它收集作者和帖子的数据,然后在welcome索引视图中显示它们?或者我是否应该在post模型下创建一个welcome视图,它也从作者那里获取数据?或者用其他方法来实现这一点?
我理解如何在技术上完成所有这些工作,但只是不确定使用Rails框架的最佳实践方法是什么。
我的主页(或欢迎页面)将包含来自两个模型的数据(我们称之为authors和posts),我是rails的新手,不确定什么是实现这一点的最佳方法。
我是否应该创建一个名为welcome的新控制器,它收集作者和帖子的数据,然后在welcome索引视图中显示它们?或者我是否应该在post模型下创建一个welcome视图,它也从作者那里获取数据?或者用其他方法来实现这一点?
我理解如何在技术上完成所有这些工作,但只是不确定使用Rails框架的最佳实践方法是什么。
7条答案
按热度按时间d4so4syb1#
似乎没有一个最佳实践。
**(1)**标准的
config/routes.rb
文件似乎建议根页面(或主页/欢迎页面)应该由welcome#index
处理。如果您要以此为指导,则要生成相应的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#about
、pages#contact
、pages#terms
、pages#privacy
等等。在
config/routes.rb
中:**(3)**Ruby on Rails教程中有
static_pages#home
和static_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”。
2izufjch2#
问题是,你的主页只是一个登录页面还是一组页面?如果它只是一个登录页面,你不希望你的用户在那里停留很长时间,除非去其他地方。如果它是一组页面,或者类似于一个现有的组,你可以添加一个动作到它最相似的控制器。
我为我当前的项目所做的是做一个名为
Static
的控制器,因为我需要3个静态页面,主页就是其中之一,因为除了去其他地方,没有什么可看或可做的。要Map默认路由,请在
routes.rb
中使用以下命令:在我的例子中,这将是:
如果你愿意的话,你可以为这个主页创建一个控制器,我会称它为main,或者你能记住的与主页相关的东西,从那里你可以得到你的数据和模型,并服从输出视图。
假设您已经正确定义了模型关系,那么匹配它的模板将非常简单。
祝你好运,希望这对你有帮助。
chhqkbe13#
当我刚开始使用Rails的时候,我问过自己类似的问题。下面是你需要知道的:
也就是说,一个特定的控制器/视图组合可以与生成该特定页面所需的任意多个模型一起工作。
控制器的用途是准备您需要显示的数据集,而不管使用什么模型来存储该数据。
视图的目的是以最合适的方式显示数据。
换句话说,控制器/视图组合从来不在某个特定的模型之下。它们使用模型,但在任何层次关系中都不在模型之下。事实上,无论它们使用什么模型,它们都是同级。
我认为混淆来自于AWDR和其他介绍性文本中的scaffold生成器示例,如:
ruby脚本/生成scaffold模型控制器
我知道模型和控制器/视图之间隐含的关系让我有点困惑。但是实际上并没有严格的关系。如果有,那么用MVC方法做任何复杂的事情都是非常困难的。很明显,事实并非如此。
希望这对你有帮助。
--约翰
nkoocmlb4#
最好的做法是你的第一个建议。创建一个“欢迎”控制器,并调用任何你想要的模型的记录。有一个根路由指向该控制器。非常干净和适当。
t3irkdon5#
请注意,在Rails 3中,正确的处理方法是在routes.rb文件的末尾添加以下行:
并删除public/index.html。
还请注意,welcome#index对应于WelcomeController中的索引操作,来自Wicked Flea的答案的代码看起来像这样:
z3yyvxxp6#
此答案来自Rails 3.2.1。
首先为页面设置一个控制器,例如命名为
static
:在文件
app/controllers/static_controller.rb
中:创建新视图文件
app/views/index.html.erb
最后配置您的
config/routes.rb
:这将使
/home
和/
转到您在刚刚创建的视图文件中输入的内容。qv7cva1a7#
创建一个名称尽可能恰当的新控制器。SummaryController?StartController?DailyFrontPageController?您会有一个想法。
不仅如此,我会认真考虑创建一个新的Model,* 而不是 * 基于ActiveRecord,从Author和Post模型中收集信息(或者不管它们真实的是什么)以便在你的视图中呈现。另一种选择是在控制器中组装数据,这几乎肯定会很混乱--这是我每次尝试的时候,而且我试了很多次,单独的型号最后似乎要整洁得多。
如果处理相对简单,为什么不尝试先在控制器中构建数据,然后将输出 Package 在Struct中,然后用一个真实的的类替换Struct,并将构造移动到那里,一路重构。这不会增加太多的总时间(大多数代码可以重用),而且你会很好地了解什么最适合你。