【问题标题】:Where to put the converter method in ruby on rails将转换器方法放在 ruby​​ on rails 中的位置
【发布时间】:2015-12-25 06:17:13
【问题描述】:

一般来说,控制器在表示层,从模型中获取数据并发送到view

现在,我的控制器获得了一个数据,但我需要将格式转换为可在视图上使用的 javascript 样式。例如,我有一个X 的列表,和一个Y 的列表,我需要创建两种可以直接在视图中使用的表。所以我需要一个叫create_table X Y的方法,例如:

def create_table X Y
    @table1 = .....
    @table2 = .....
end

@table1@table2 在视图中使用。

所以我的问题是,把这个函数放在哪里?

在控制器中?我认为控制器中的大多数方法都意味着与特定视图相关的操作。

在控制器中的私有?我看到在controller里面有set_XXX,XXX_params这样的方法是私有的,如果我把方法放在这里,视图可以直接访问方法中的实例吗?

在助手中?我看到有人把方法放在这里,并在控制器中包含了助手,但据我所知,助手中的方法仅供视图使用。

谁能帮帮我?谢谢!

【问题讨论】:

  • 这听起来像一个presenterdecorator。我会在app 文件夹中添加一个presenters 文件夹,并将一个类放入该文件夹中。
  • 将函数放入helper

标签: ruby-on-rails ruby model-view-controller architecture


【解决方案1】:

在 Rails 中要遵循的典型约定是将模型视为用于检索和修改数据库中信息的类,将控制器视为用于基于 http 请求参数构建实例变量和调用模型方法的类,并将视图视为用于显示存储在控制器创建的实例变量中的信息的演示模板。

有了这种心态,您所宣传的 create_table 方法肯定应该存在于 Rails 的 MVC 架构的视图端,而不是控制器中。

根据此create_table 方法的复杂性,您可以使用视图partial 或视图helper 方法。


查看助手

视图帮助方法在app/helpers/my_helper.rb下的模块中定义。

关于视图助手的不错的文章:http://www.rails-dev.com/custom-view-helpers-in-rails-4

查看部分

视图部分被定义为视图文件夹下的模板,并具有以下划线前缀的文件名,例如app/views/some_folder/_my_partial.html.erb

Rails 的局部指南:http://guides.rubyonrails.org/layouts_and_rendering.html#using-partials


这篇文章很好地解释了在 Rails 中放置代码片段的位置:

http://codefol.io/posts/Where-Do-I-Put-My-Code

【讨论】:

  • 对不起,谢谢你的回答,可能是我没有解释清楚我的问题。 create_table 方法不直接用在视图中,而是在控制器中使用。我在问题中编辑的示例
  • 好的,这将打破 MVC 架构的约定。也就是说,您仍然可以在视图助手模块中编写您的方法。然后,在您的控制器中,包含帮助程序模块:include MyHelper
【解决方案2】:

通常,您将这种“帮助程序”放在 lib 文件夹中,例如:'./lib/my_parser.rb'

另外,您可以在 gem 中转换一堆逻辑。

一些参考: http://blog.codeclimate.com/blog/2012/02/07/what-code-goes-in-the-lib-directory/

【讨论】:

    猜你喜欢
    • 2012-06-18
    • 1970-01-01
    • 2021-04-02
    • 2016-12-23
    • 2011-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多