J'ai une méthode qui fait appel paginé find comme ..utilisant lambda trouver dans des rails
coll = paginate(:all, lambda {{:conditions => ['status = ? AND expires < ?', 'a', DateTime.now]}}, :select => Constants::POST_FIELDS,
:order => 'posts.ratings DESC', :include => [{:poster => :poster_friends}, :category], :per_page => Constants::LISTINGS_PER_PAGE,
:page => page)
Lorsque cet appel exécute ignore simplement les conditions dans la requête générée.
Si j'essaie dans un named_scope je reçois une erreur comme ..
named_scope :featured_all, lambda {{:conditions => ['status = ? AND expires < ?', 'a', DateTime.now], order => 'posts.ratings DESC', :include => [{:poster => :poster_friends}, :category],
:select => Constants::POST_FIELDS}}
L'erreur-champ nommé:
/usr/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/hash/keys.rb:47:in `assert_valid_keys'
/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:2101:in `with_scope'
/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/named_scope.rb:113:in `__send__'
/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/named_scope.rb:113:in `with_scope'
/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/named_scope.rb:174:in `method_missing'
/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/named_scope.rb:188:in `load_found'
/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/named_scope.rb:166:in `proxy_found'
/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/named_scope.rb:109:in `is_a?'
/usr/lib/ruby/gems/1.8/gems/hirb-0.3.1/lib/hirb/formatter.rb:78:in `determine_output_class'
/usr/lib/ruby/gems/1.8/gems/hirb-0.3.1/lib/hirb/formatter.rb:48:in `format_output'
/usr/lib/ruby/gems/1.8/gems/hirb-0.3.1/lib/hirb/view.rb:213:in `render_output'
/usr/lib/ruby/gems/1.8/gems/hirb-0.3.1/lib/hirb/view.rb:126:in `view_output'
Pour # 1. Qu'est-ce que je fais de mal, pourquoi ignore-t-il les conditions?
Pour # 2 Pourquoi cette erreur? Et aussi, comment puis-je passer le paramètre: page et per_page pour limiter la requête dans le named_scope.
Merci
Pourquoi vous envelopper les conditions dans un lambda? – jtbandes
Afin que j'obtienne le DateTime.now correct. Si ce n'est pas le cas, cet appel ne renverra-t-il pas le DateTime.now, puisque le serveur a été démarré? – badnaam
@badnaam: La seule différence en l'enveloppant dans un lambda et en l'appelant immédiatement serait que le temps retourné serait plus lent de quelques microsecondes pour tenir compte du temps pris par l'appel lambda lui-même. – Chuck