我不太明白帮助器在视图/控制器中的工作方式。我从未使用过它们。
我的具体问题是:几乎所有的观点都实现了AJAX。在我的大多数控制器中, update.js.coffee 和 create.js.coffee 具有以下代码的某种形式:
jQuery ->
<% if @product.errors.any? %>
error_info = '<%= j(render :partial => "shared/errors", :locals => { :record => @product }) %>'
popup error_info
<% else %>
.
.
.
其中popup
是一个显示某个元素的javascript函数。
有没有办法将其抽象为帮手?做这个的最好方式是什么?这个代码几乎完全相同,除了@product
的2个用途当然会有所不同,具体取决于所讨论的模型。
如果这不是帮助者的用途,那么1)他们使用了什么? 2)我应该使用什么呢?
编辑:奖金问题:实际上,我的许多新功能,创建功能,编辑功能和更新功能在各个型号中都是相似的。你怎么干这个?或者你只是不担心它?
答案 0 :(得分:3)
第一步是将文件的扩展名更改为.js.coffee.erb
。这让资产管道知道您希望用ERB解释文件。
第二个可选步骤是向Sprokets添加自定义帮助程序,以便您可以从Coffee脚本文件中调用自己的方法*。只需创建一个新的辅助模块,然后将其注册到初始化程序中:
Sprockets::Context.send :include, CoffeeHelper
*:资产将无法访问您习惯使用的所有帮助程序,因为ERB在编译资产时运行,而不是作为HTTP请求的一部分运行。正常的控制器/辅助设置不存在。
答案 1 :(得分:0)
如果你想将这个代码重构为rails helper,就像任何其他helper方法一样,你必须将所有的javascript代码作为一个字符串,你的rails helper将需要返回一个字符串。
Rails帮助程序可以帮助您从视图中重构逻辑,这样您就可以尽可能减少代码逻辑,并允许重复代码更加干燥。
如果您发现某些代码在模型中重复出现,您还可以考虑将该代码重构为lib目录中的ruby模块,并将该模块包含在模型中。