我不太明白助手是如何在视图/控制器中工作的。我从来没有用过它们。
我的具体问题是:我的几乎所有视图都实现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 %>
.
.
.
其中CCD_ 1是用于显示某个元素的javascript函数。
有没有办法把它抽象成一个助手?最好的方法是什么?这段代码在所有情况下几乎完全相同,只是@product
的两种用法当然会因所讨论的模型而异。
如果这不是助手的用途,那么1)它们的用途是什么?以及2)我应该使用什么?
编辑:额外的问题:实际上,我的许多新功能、创建、编辑和更新功能在不同的模型中都是相似的。你是怎么把它弄干的?还是你就是不担心?
第一步是将文件的扩展名更改为.js.coffee.erb
。这让资产管道知道您希望使用ERB来解释文件。
第二个可选步骤是向Sprockets添加自定义助手,这样您就可以从Coffee脚本文件中调用自己的方法。只需创建一个新的助手模块,然后将其注册到初始值设定项中:
Sprockets::Context.send :include, CoffeeHelper
*:资产将无法访问您习惯使用的所有帮助程序,因为ERB是在编译资产时运行的,而不是作为HTTP请求的一部分。正常的控制器/助手设置不存在。
如果您想将此代码重构为rails助手,那么它将像任何其他助手方法一样完成,您必须将所有javascript代码作为字符串,并且rails助手需要返回一个字符串。
Rails助手可以帮助重构视图中的逻辑,这样您就可以尽可能减少代码逻辑,并且可以让重复的代码更加枯燥。
如果您发现某些代码在模型中重复,您还可以考虑将该代码重构到lib目录中的ruby模块中,并将该模块包含到模型中。