3

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

我的具体问题是:几乎我所有的观点都实现了 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 %>
.
.
.

哪里popup是显示某些元素的 javascript 函数。

有没有办法把它抽象成一个助手?做这个的最好方式是什么?这段代码在每种情况下几乎完全相同,除了 2 的用途@product当然会根据所讨论的模型而有所不同。

如果这不是帮助器的用途,那么 1)它们是用来做什么的?2)我应该改用什么?

编辑:奖金问题:实际上,我的许多新功能、创建功能、编辑功能和更新功能在模型之间都是相似的。你怎么把它弄干?或者你只是不担心吗?

4

2 回答 2

3

The first step is to change the extension of your file to .js.coffee.erb. This let's the asset pipeline know that you want the file to be interpreted with ERB.

The second, optional step is to add custom helpers to Sprokets so that you can call your own methods from your Coffee script files*. Simply create a new helper module and then register it in an initializer:

Sprockets::Context.send :include, CoffeeHelper

*: The assets will not be able to access all the helpers you are used to using because the ERB is run when the assets are compiled rather than as part of an HTTP request. The normal controller/helper setup is not present.

于 2013-12-15T02:42:43.897 回答
0

如果您想将此代码重构为 rails 帮助程序,则可以像任何其他帮助程序方法一样完成,您必须将所有 javascript 代码作为字符串,并且您的 rails 帮助程序需要返回一个字符串。

Rails 助手可以帮助重构视图中的逻辑,以便您可以尽可能地保持代码无逻辑,并且可以让重复的代码更加枯燥。

如果您发现某些代码在您的模型中重复出现,您还可以考虑将该代码重构为 lib 目录中的 ruby​​ 模块,并将该模块包含到您的模型中。

于 2012-07-11T04:38:29.137 回答