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

Ruby on rails RubyonRails中的欢迎/主页-最佳实践,ruby-on-rails,ruby,Ruby On Rails,Ruby,我的主页(或欢迎页面)将包含来自两个模型的数据(让我们称它们为作者和帖子)。我是rails新手,不确定实现这一点的最佳方法是什么 我是否应该创建一个名为welcome的新控制器,它从作者和帖子收集数据,然后在welcome index视图中显示它们?或者我应该在post模型下有一个受欢迎的观点,它也从作者那里获取数据?或者其他方法来实现这一点 我知道如何在技术上做到这一切,但不确定使用rails框架的最佳实践方法是什么。创建一个新的控制器,并尽可能适当地命名。总控制器?星控器?DailyFron

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

我是否应该创建一个名为welcome的新控制器,它从作者和帖子收集数据,然后在welcome index视图中显示它们?或者我应该在post模型下有一个受欢迎的观点,它也从作者那里获取数据?或者其他方法来实现这一点


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

创建一个新的控制器,并尽可能适当地命名。总控制器?星控器?DailyFrontPage控制器?你会有主意的

不仅如此,我会认真考虑创建一个新的模型,而不是ActudieCordD,收集你的作者的信息和帖子模型(或者不管他们的真实姓名)在你的视图中呈现。另一种方法是在控制器中组装数据,这几乎肯定会很混乱——每次我都是这样做的,而且我试了很多次。一个单独的模型似乎最终要整洁得多


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

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

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

要映射默认路线,请在
routes.rb中使用以下命令:

# Place at the end of the routing!
map.root :controller => 'MyController', :action => :index
class StaticController < ApplicationController
    def index       
    end
end
MyApp::Application.routes.draw do
   match 'home', :to => "static#index"
   root :to => "static#index"
end
就我而言,这将是:

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
class MainController10,:order=>date\u posted',:include=>user)
结束
结束
假设您正确定义了模型关系,那么匹配它的模板将非常简单


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

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

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

  • 模型不一定与控制器和视图直接相关
也就是说,一个特定的控制器/视图组合可以处理生成该特定页面所需的任意多个模型

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

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

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

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

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

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

希望这有帮助


--John

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

root :to => "welcome#index"
并删除public/index.html.erb

还请注意,欢迎#索引对应于WelcomeController中的索引操作,来自邪恶跳蚤答案的代码如下所示:

class WelcomeController < ApplicationController
  def index
    @posts = Posts.find(:all, :limit => 10, :order => 'date_posted', :include => :user)
  end
end
class WelcomeController10,:order=>date\u posted',:include=>user)
结束
结束

似乎没有一个最佳实践

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

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)使用
PagesController
。它实际上建议使用
pages#main
,但对我来说,使用
pages#home
(因为“主页”是一个普遍存在的术语/概念)更有意义。此外,该控制器还可以处理其他面向页面的操作,例如
页面#关于
页面#联系
页面
MyApp::Application.routes.draw do
   match 'home', :to => "static#index"
   root :to => "static#index"
end