2011-10-11 7 views
0

私はundefined method 'social_system' for #User:0x000001052e2ad8を取得しています。私はブロックの価値を使用していると思った、誰かが私が間違っていることを説明することができますか?Rails 3:ブロック内で変数を使用しようとすると未定義のメソッドを取得する

# User model: 
facebook_url string 
google_plus_url string 

# Constants defined in User model: 
SOCIAL_SYSTEMS  = [ 'facebook_url', 'google_plus_url' ] 
SOCIAL_SYSTEM_NAMES = { 'facebook_url' => 'Facebook', 
         'google_plus_url' => 'Google +' } 

# View (going to be a helper eventually) 
<% User::SOCIAL_SYSTEMS.each do |social_system| 
     url = @user.send(social_system) 
     if url %> 
     <p><a href="<%= url %>"> 
      <%= User::SOCIAL_SYSTEM_NAMES[social_system] -%> 
     </a></p> 
<% end 
    end 
%> 
+0

変数social_systemは 'facebook_url'、 'google_plus_url'

エコー検査の値のみを持っている必要があります。私はエラーが '@ user.send(social_system)'行から出ていると仮定します。どのバージョンのRubyを使用していますか? Ruby 1.9.2に違いがない限り、 'send_'メソッドは文字列をうまく取ることができるはずなので、' @ user.send(social_system.to_sym) 'を試してみることはできますが、それは単なる推測です。私は知らない。 – bricker

答えて

0

うーん、エラーMSGが "social_system" ではない変数として、文字列CONSTとして扱われていることを意味

undefined method 'social_system' for #User:0x000001052e2ad8.

からです。

何が送信されているかを確認するためにエコーしてみてください。私の知る限り、これは動作するはずです、言うことができるように

# View (going to be a helper eventually) 
<% User::SOCIAL_SYSTEMS.each do |social_system| 
%> 
<p>social_system = <%= social_system %> 
<% #  url = @user.send(social_system) 
    # if url %> 
    #  <p><a href="<%= url %>"> 
      <%= User::SOCIAL_SYSTEM_NAMES[social_system] -%> 
     </a></p> 
<% # end 
    end 
%> 
+0

私はコメント行を削除しなければなりませんでしたが、私は "social_system = facebook_url Facebook social_system = google_plus_url Google +"を取得していましたが、これは正しいものですか? –

+0

ちょっとラリー私は別のスレッドであなたのメッセージのためにそれを考え出した "モデルの属性はメソッドとして実装されます。慎重に定数配列の名前に対して属性名の大文字とスペルをチェックしてください。上記の答えにそれを加えたいのであれば、これにチェックマークを付けます。再度、感謝します。 –

関連する問題