2016-04-14 6 views
-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行で渡す正しい方法は何ですか?

+0

は 'です:=>「列はaasm''へargs' 'の一つであると仮定col_name''?メソッド呼び出し 'aasm(:test)'の後で '' column => 'col_name''はハッシュですが、コードブロックでなければならないので、構文エラーです。 – Rashmirathi

+0

私はそう信じています。別の引数は:テストです。ブロックは '{}'にあります。 – user938363

答えて

1

おそらく、代わりにこのようにそれを記述する必要があります。

eval("aasm(:test, :column => 'col_name') {#{def_string}}") 
関連する問題