我知道有一些方法可以让控制器可以使用帮助程序,但这通常是不好的形式。如何重新开展以下工作以避免这种情况?
我有一个名为“fullname”的联系人助手,它结合了联系人的名字和姓氏。
在应用程序布局中呈现一个名为subheader的布局部分,并包含以下代码:
<section id="subheader"><%= @subheader %></section>
控制器设置@subheader的值。
问题是我经常想在@subheader中使用“fullname”。但这意味着从控制器访问帮助器。这个fullname方法应该驻留在其他地方吗?
答案 0 :(得分:2)
像fullname这样的东西我通常只是在模型本身上定义一个方法。
如果fullname方法执行某种类型的HTML格式化,那么我会将这些部分保留在帮助程序中。
答案 1 :(得分:1)
由于你的问题的标题可能会吸引观众寻找不同的答案,我将回答“我可以在我的控制器中使用rails helpers”的问题吗?这有合法的用途,所以这是最干净的方法:
在帮助程序文件中,将要访问的代码包装在如下的模型中:
module HelperModuleName
[helper code here]
end
仅包含您需要在控制器中使用的代码(而不是使用include ApplicationHelper
包含所有帮助程序)是一个好主意,因为它减少了方法名称冲突的可能性并迫使您更加慎重选择在控制器中使用帮助器。
现在在application_controller.rb中包含该模块:
class ApplicationController < ActionController::Base
protect_from_forgery
include HelperModuleName
end