-1
方法aasm
は次のように定義されています* argsと&blockを使ってRubyメソッドの値を渡す方法は?
eval("aasm(:test) :column => 'col_name' {#{def_string}}")
def_string = "state :fresh, :initial => true
state :move
event :submit do
transitions :from => :fresh, :to => :move
end"
しかしunexpected ':', expecting end-of-input
の構文エラーがあります:
def aasm(*args, &block)
if args[0].is_a?(Symbol) || args[0].is_a?(String)
# using custom name
state_machine_name = args[0].to_sym
options = args[1] || {}
else
# using the default state_machine_name
state_machine_name = :default
options = args[0] || {}
end
.......
#do something else
end
今、私たちは、文字列全体aasm....
を入れ、その上にeval
を行う必要があります。 (:test) :column => 'col_name'
を{}
と[]
に入れようとしましたが、エラーは消えません。すべての値をaasm
に1行で渡す正しい方法は何ですか?
は 'です:=>「列はaasm''へargs' 'の一つであると仮定col_name''?メソッド呼び出し 'aasm(:test)'の後で '' column => 'col_name''はハッシュですが、コードブロックでなければならないので、構文エラーです。 – Rashmirathi
私はそう信じています。別の引数は:テストです。ブロックは '{}'にあります。 – user938363