这一点haml有效:
%select{ :name => 'color', :value => @p.color}
- Person.color.options[:flags].each do |colors|
- if @p.color == colors
%option{:value => colors, :selected => "selected"}= colors
- else
%option{:value => colors}= colors
我正在尝试从中创建一个助手,以便我可以重用它:
helpers do
def options(prop, p)
Person.prop.options[:flags].each do |x|
if p.prop == x
"%option{:value => #{x}, :selected => 'selected'}= #{x}"
else
"%option{:value => #{x}}= #{x}"
end
end
end
end
然后调用它:
%select{ :name => 'color', :value => @p.color}
- options(color, @p)
但我收到了这个错误:undefined local variable or method 'color'
我离得很远吗?
编辑2:
循环中发生了一些奇怪的事情。
即使是这样一个简单的例子:
helpers do
def options(prop, p)
Person.send(prop).options[:flags].each do |x|
"<p>test</p>"
end
end
end
和= options(:color, @p)
打印一个选项数组(在我的例子中[:red, :blue, :yellow]
)并且不插入任何 html。但是,如果我这样做puts <p>test</p>
,它确实会循环三次并正确打印它们——它们只是不会出现在 html 中。