2012-03-08 19 views
0

私はRails 3の問題に遭遇しているようで、私はそれを理解できないようです。 は、ここで私が何をしようとしていますものです:ルビのデータモデルを変更する文字列を評価

att1 = "column" 
att2 = "1" 
final_column = "#{att1}_#{att2}" 

obj.final_column = 4 
    ====> Error 
    -----> NoMethodError: undefined method `final_column=' for class.... 

私はこれを行う場合、それはしかし動作します:

obj.column1=4 

は、私はそれを動作させるために私のfinal_columnに何ができますか? ありがとう!

答えて

2

あなたはこれをしたい:

obj.send("#{final_column}=", 4) 

あなたがプライベート/保護されたvisibliyを尊重したい場合は、public_send代わりのsend使用します。

+0

私が探していたものとまったく同じですが、ドット表記の使用を避けたいと思っていました。何か欠点があるかどうか知っていますか? –

+0

@MarcoA潜在的な問題は、 'send'が' private'/'protected'可視性をバイパスすることです。そうでなければできないメソッドを呼び出すことが可能です。 –

+0

これは混乱しやすく、エラーが発生する可能性があります。また、ブラウザやユーザーの入力に由来する文字列を使用したくない場合もあります。同様に、 "@ account.send(some_action)"を実行したが、ユーザーが "some_action"を "destroy"に設定した場合はどうでしょうか。あなたは困っているだろう。 – nicholaides

関連する問題