0

メインモデル内にメソッドがあり、設定されたパラメータに基づいて特定の値を返す必要があります。

def self.retrieve_profiles( params )

  case params[:view]

    when 'image_only'
      fields = %w{ avatar }

    when 'profile_minimal'
      fields = %w{ avatar username age }

    when 'profile_medium'
      fields = %w{ avatar username age first_name last_name bio relationship_status seeking }

    when 'profile_extended'
      fields = %w{ avatar username age first_name last_name bio relationship_status seeking country city photos }

  end    

  profiles = Profile.that_has_photos
  profiles = profiles.where( :country_id => params['country'] ) unless params['country'].nil?    
  profiles = profiles.order( "RAND()" ).limit( params['count'] )      

  # works fine up to here (returns all fields)

  profiles.each do |a|
    fields.each do |field|
      puts a.eval(field)
    end
  end

  # above block makes it fail (private method `eval' called)

end

fields私の質問は、ハッシュで指定された値のみを返すにはどうすればよいですか?

4

1 に答える 1

3

sendの代わりに使用してくださいeval。このコードは正常に機能するはずです。

  profiles.each do |a|
    fields.each do |field|
      puts a.send(field)
    end
  end
于 2012-09-27T12:56:30.277 に答える