RoR中是否有办法访问助手中的当前部分本地人。我想要像
这样的东西<% render partial: 'foo', locals: { :foo: 'bar' } %>
然后进入,让我们说ApplicationHelper:
def my_helper_method
...
my_var = ...local_assigns[:foo] # should assign 'bar'
...
end
描述问题的其他方法是:如何隐式地将传递给部分的局部传递给我的助手方法?如果我明确地这样做,有很多样板代码,它只是将部分参数传递给一个辅助方法,而且我有很多这样的代码。
有可能吗?
答案 0 :(得分:1)
助手不了解局部变量中的局部变量。除非您明确地向他们传递参数,否则您无法按照您的建议行事。你可以做的是使用presenters采用面向对象的方法,并避免一起使用帮助器。
如Railscasts剧集中所述,制作您自己的,或使用像Draper这样的宝石。就个人而言,我赞成你自己的#34;接近因为它非常简单。
一些伪代码可以解决这个问题:
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
只是从你的视图中实例化。
= present_foo(foo) do
= amazing_foo
是的,不需要通过params。
帮助程序只是在命名空间中浮动的模块,坦率地说,它们大多数时候都会鼓励错误的编码实践。演示者提供了一种清晰的OOP方式来处理复杂的视图逻辑。试一试。
答案 1 :(得分:0)
通常您会将参数从视图传递到方法中,因此请将方法更改为:
def my_helper_method(input_param)
...
my_var = ...foo # should assign 'bar'
...
end
并将其称为视图中传递foo的任何其他方法作为input_param。
答案 2 :(得分:0)
您需要将参数发送到my_helper_method
def my_helper_method(foo)
...
my_var = foo
...
end
部分
<%= my_helper_method(foo) %>