1

我通过 Mickael Hartl 的教程学习了 RoR 编程,我非常喜欢。

现在我正在开发一个包含 8 种对象的应用程序。

对于每个对象,我需要分配一个来自状态表的状态,并分配当前用户的名称。

在每个控制器的私有部分中,我编写了一个 statuses_list 函数和一个 current_user_name,它们使这些数据可用于分别选择表单中的字段。

这听起来不太像 DRY。编写这样的函数作为助手是否相关和安全,以便数据在我的应用程序中的任何地方都可用?

谢谢你的建议,

此致,

弗雷德里克

4

5 回答 5

1

将这些方法移到它们的主类中。Status.list()User.current_user()。这通常是人们解决问题的方式“每个人都需要一个current_user,但没有人想要一个$current_user全局变量。

然后在您的 s 中分配current_user非常早的时间before_filter,当身份验证系统识别用户时。并阅读 Avdi Grimm 的 /Confident Ruby/,以获得关于如何以及为什么创建Guest用户的非常好的文章,current_user如果没有人登录则返回:http: //devblog.avdi.org/2013/08/ 26/自信的红宝石完成了/

于 2013-11-03T16:34:32.777 回答
1

将方法放在帮助文件中是使它们在视图中可用的最佳方法,但如果您想让这些方法在控制器中可用,则将它们作为方法放入ApplicationController并在顶部指定:

helper_method: :statuses_list, :current_user_name

希望有帮助。

于 2013-11-03T18:26:00.217 回答
0

要使您的代码在整个应用程序中可访问,您必须在helpers. 这当然是一个DRY原则,可以帮助您一次又一次地减少同一行代码。

于 2013-11-03T16:38:04.193 回答
0

我会推荐使用继承给一些控制器一些相同的方法。

创建一个扩展 ApplicationController 的超类,如:

class SuperController < ApplicationController
    [...]
end

并将其子类化

class MyControllerClass < SuperController
    [...]
end

将重复的东西放在 SuperController 中 - 等等!MyControllerClass 继承方法 SuperController 所以你不需要重复它们。

于 2013-11-03T16:35:02.090 回答
0

好吧,感谢收集的所有答案,这就是我的做法:

在 a 中定义了一个set_statuses_list方法ParametersHelper

添加include ParamtersHelperApplicationController

before_action :set_statuses_list在我的 8 个对象控制器中添加

这感觉像是一个很好的平衡,我很乐意收到关于它的评论。请注意,该current_user方法确实已经通过SessionsHelper.

谢谢你的帮助,

此致,

弗雷德里克

于 2013-11-03T23:44:00.277 回答