如何通过yield / block.call检查方法是否执行?

时间:2014-03-08 13:01:24

标签: ruby-on-rails ruby

在一个非常基本的例子中,我有两个Rails表单助手togglescheckbox。我希望复选框的标记在切换块内部时不同。我试图使用一个实例变量来检查我是否在toggles方法中,但有人说维护这样的状态会破坏在多线程应用程序中使用它的能力。什么是更好的方式?

所以基本上我想在执行toggles时检查我是否在checkbox内。

<%= toggles 'Select one' do %>
  <%= f.checkbox 'Foo' %>
  <%= f.checkbox 'Bar' %>
  <%= f.checkbox 'Baz' %>
<% end %>

def toggles(*args)
  @inside_toggles = true
  template.concat yield
  @inside_toggles = false
end

def checkbox(*args)
  if @inside_toggles
    ...
  else
    ...
  end
end

1 个答案:

答案 0 :(得分:0)

如果只是格式化问题,您是否尝试使用CSS?

您为辅助方法toggles

添加了一个类
def toggles
  content_tag :div, class: 'toggle'
end

然后在你的CSS中

.toggle input[type="checkbox"] {
   /* special format */
}