2011-12-14 4 views
0

[OK]を私はこれは私がにはどうすればいいのRuby on Railsでモデルを見つけることunderscrore回すん

user.rb //ユーザーモデル

OPTION = ['none', 'all', 'partial'] 
ANOTHER = ['true', 'false', 'neither'] 
YET_ANOTHER = ['something', 'another'] 

application_helper.rb

を持っているものを持っています
def my_method(information, name) 
    #this is where i need help 
    User::OPTIONS 

index.html.erb

例えば私は私が考えていた

​​

を実行する必要がありmy_methodビューヘルパーに

my_method('information', :another) 

に送信する場合のでmy_methodビューヘルパーで、私は正しい配列をつかむにはどうすればよい

my_method('information', :option) 
my_method('information', :another) 
my_method('information', :yet_another) 

私は上向きにすることができますが、私はこれを実行する方法....

私はこれを試した

User::name.upcase 
NoMethodError: undefined method `name' for #<Class:0x000d001078cd9c8> 

答えて

1

次の操作が必要です。

User.const_get(name.to_s.upcase) 

これは機能しますが、ユーザーが提出したパラメータをconst_getに渡していないことを確認してください。これはセキュリティ上の脆弱性であり、ユーザーは意図しないコードを本質的に実行することができます。代わりに、単純に条件を使用する必要があります。

info = case params[:something] 
when 'foo'; User::FOO 
when 'bar'; User::BAR 
end 
+0

最初の部分が文字列でもある場合は、これを行う方法があるので、MODELNAME場合、私はとても基本的--------------情報=「ユーザー」 – Trace

+0

を持っている場合メソッドにも定数名としても渡されました – Trace

+0

私は本当にこれをすることをお勧めしませんが、 'Object.const_get(model_name).const_get(name.to_s.upcase)'はそれを行います。 –

関連する問題