Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 生成控制器时,仪表板会变成仪表板吗?_Ruby On Rails_Ruby_Ruby On Rails 3_Ruby On Rails 3.1 - Fatal编程技术网

Ruby on rails 生成控制器时,仪表板会变成仪表板吗?

Ruby on rails 生成控制器时,仪表板会变成仪表板吗?,ruby-on-rails,ruby,ruby-on-rails-3,ruby-on-rails-3.1,Ruby On Rails,Ruby,Ruby On Rails 3,Ruby On Rails 3.1,用户控制器之所以被命名为UsersController,原因很简单,因为它控制多个用户,但实际上它不是只更改特定于特定用户的几个参数吗 因此,对我来说最符合逻辑的事情是,控制器名称仪表板应命名为DashboardsController,因为它控制多台PC上的多个仪表板,并且由于呈现页面后某些特定字段的细微变化,因此应将其命名为Dashboards。就像用户是命名用户,而不是用户 这让我回到了起点。我如何决定选择什么;复数还是单数?仪表板在应用程序中只是一个特定的东西,而用户并不是真正控制自己的仪

用户控制器之所以被命名为UsersController,原因很简单,因为它控制多个用户,但实际上它不是只更改特定于特定用户的几个参数吗

因此,对我来说最符合逻辑的事情是,控制器名称仪表板应命名为DashboardsController,因为它控制多台PC上的多个仪表板,并且由于呈现页面后某些特定字段的细微变化,因此应将其命名为Dashboards。就像用户是命名用户,而不是用户

这让我回到了起点。我如何决定选择什么;复数还是单数?仪表板在应用程序中只是一个特定的东西,而用户并不是真正控制自己的仪表板,但是当用户名以及特定的用户喜欢的标记呈现在页面上时,仪表板又是完全不同的


这方面的最佳实践是什么

rails惯例是使用复数定义控制器名称(例如/仪表板)。这不是一成不变的,您可以根据自己的需要进行更改,但如果您想知道最佳实践是什么,那么您最好坚持rails惯例,特别是如果您刚刚开始使用rails。这会让你的生活简单得多

如果您确实想为控制器(例如/dashboard)使用单数术语,可以在routes.rb文件中指定该术语(这假设您使用的是RESTful路由并将dashboard定义为资源)

还请注意,如果您决定使用singular,则需要相应地调整rails为RESTful路由创建的帮助器方法,因此

  dashboards_path # will no longer work, you must use
  dashboard_path 

为控制器使用复数名称只是Rails惯例之一。你应该背离惯例吗?我认为如果你坚持下去会更好

正如您提到的,复数名称听起来更自然。我确信您的仪表盘控制器将有不止一个操作,因此它回到了多元化的理念


我的建议是坚持复数惯例。

我倾向于在仪表盘上使用演示者模式。仪表板是对象的混合体,很难将其视为显示或索引页面。我将创建一个虚拟对象来处理相关对象的查询和聚合。它确实清理了控制器代码,即使您决定使用仪表板控制器

但是,我建议在路由中添加resources.users

collection do 
  get :dashboard
end
然后在UsersController下添加一个操作仪表板

def dashboard
  @presenter = UserDashboardPresenter.new(user)
end
在视图中使用@presenter


如果您在presenter模式上进行搜索,您将找到更多有关该模式的信息。它非常适合缓存、代码重用、测试和性能增强。

我将保留您关于在后台使用演示者的建议,因为这不是一个坏主意。我检查了RailsCasts,Draper可以很好地工作,或者我可以从头开始,但在我开始在视图中获得太多逻辑之前,我将坚持使用Dashboard的多元化版本。谢谢:)我不用德雷珀,它有点不同。我倾向于将这些类看作视图模型——它们很好地封装了视图的内容。如果您开始在控制器中看到一长串实例变量或基于用户的大量逻辑,这是清理它的一种方法。然后我将继续使用dashboard的多元化版本,我想这个词并没有那么重要:P谢谢!你确定吗?例如,有
application\u controller
而不是
applications\u controller
,因为它就像
dashboard
singleton。然后我也会坚持使用它,也许我以后会集成som presenter gem或一些从头制作的东西,但在此之前我不会改变为单一形式。谢谢
def dashboard
  @presenter = UserDashboardPresenter.new(user)
end