このちょっとした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>
と、ループが3回実行され、正しく出力されます。HTMLに表示されないだけです。