如何在coffeescript js中使用Rails助手



我不太明白助手是如何在视图/控制器中工作的。我从来没有用过它们。

我的具体问题是:我的几乎所有视图都实现AJAX。在我的大多数控制器中,update.js.coffeecreate.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模块中,并将该模块包含到模型中。

最新更新