ruby-on-rails - 帮助程序中的 Rails 部分本地人

标签 ruby-on-rails ruby

RoR 中是否有一种方法可以访问 helper.helper 中的当前部分局部变量?我想要类似的东西

<% render partial: 'foo', locals: { :foo: 'bar' } %>

然后可以在 ApplicationHelper 中访问:

def my_helper_method
  ...
  my_var = ...local_assigns[:foo] # should assign 'bar'
  ...
end

描述问题的其他方式是:如何将所有传递给局部变量的局部变量隐式传递给我的辅助方法?如果我明确地这样做,会有很多样板代码,它们只是将部分参数传递给辅助方法,而我有很多样板代码。

这可能吗?

最佳答案

Helpers 不知道 partials 中的局部变量。除非你明确地向他们传递一个参数,否则你不能做你所提议的。您可以做的是采用面向对象的方法,使用 presenters ,并避免一起使用助手。

要么自己制作,如 Railscasts 剧集中所述,要么使用像 Draper 这样的 gem .就个人而言,我赞成“自己动手”的方法,因为它非常简单。

一些伪代码来理解这个想法:

class FooPresenter
  def initialize(object, template)
    @object, @template = object, template
  end

  def amazing_foo
    @template.content_tag :div, class: 'foo' do
      "#{@object.name}: Wow! this is incredible!"
    end
  end
end

module FooHelper
  def present_foo(object)
    presenter = FooPresenter.new(object, self)
    yield presenter if block_given?
    presenter
  end
end

只需从您的 View 中实例化即可。

= present_foo(foo) do
  = amazing_foo

是的,不需要传递参数。

Helpers 只是在命名空间中 float 的模块,坦率地说,很多时候它们鼓励不良的编码实践。 Presenter 提供了一种清晰的 OOP 方式来处理复杂的 View 逻辑。试一试。

关于ruby-on-rails - 帮助程序中的 Rails 部分本地人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27441409/

相关文章:

ruby-on-rails - Splat (*) 运算符攻击与常量和 attr_reader 与 rubocop

ruby-on-rails - 如何监控美洲狮服务器?

ruby - 在 URI 上设置包含 [ ] 的路径

ruby-on-rails - 圆括号在 Ruby 中仍然是可选的吗?

ruby-on-rails - Rake 因 Capistrano 部署而失败

ruby-on-rails - 我可以使用 ActiveRecord::Associations::Preloader/eager loading 来加载具有动态条件的 has_one 关系吗?

ruby-on-rails - 正则表达式检查数字小数点分隔符是否一致

Ruby 检查与 Rspec 中的 to_s

ruby-on-rails - Rails 和 MQTT : Subscribe to topic in background at server startup?

ruby-on-rails - Searchkick 多模型搜索相关性问题