ruby-on-rails - 在助手中使用实例变量是一种不好的做法吗?

标签 ruby-on-rails view-helpers

我一直在重构一个旧项目,我发现一些辅助方法很难测试,因为辅助方法中存在实例变量。

实现此目标的最佳做法是什么?将这些实例变量作为参数传递给助手...

在测试中我可以做这样的事情,但看起来很奇怪

  it 'returns family and categoy names' do
    @category = instance_double(Category, name: 'category_name')
    expect(helper.meta_description_home_products).to eq(
      'blabla - categoria'
    )
  end

作为 Controller View 和助手的示例:

class HomeController < BaseController
  @family = ...
  @category = ...
  @products = ...
end

在 View 中

<% @products.each ...
  ...
  my_helper
...

在助手中:

  module ApplicationHelper
   def my_helper
     ...
     desctiption = 'blabla' if @category.name == 'blabla'

谢谢

最佳答案

我不会的。它紧密耦合了你的 Controller 和 View 层,使得 future 的功能、重写和重构变得困难。

它还使您的 Controller 和 View 难以阅读、测试和错误修复。

关注点和责任分离是需要考虑的问题。保留这些确实有助于长期项目。

关于ruby-on-rails - 在助手中使用实例变量是一种不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59128853/

相关文章:

ruby-on-rails - 如何在 Mac 上更新 SQLite?

ruby-on-rails - 为什么 Rails 2.3 不生成 Gemfile?

ruby-on-rails - 基于自连接的 Ruby on Rails 路由

ruby-on-rails - 在 Postgres 中使用子查询进行 Rails 分页查询

mysql - 使用 'having' 的 ActiveRecord Relation 的 Rails update_all 不起作用

ruby-on-rails - 在哪里放置 Rails Controller 的 Ruby 辅助方法?

javascript - 带有 javascript_tag 的 View 助手不起作用

TYPO3:使用内联流体的日期 View 助手作为翻译 View 助手的参数

ruby-on-rails - 在 coffeescript 中获取 rails view helper 方法