Я пытаюсь реализовать расширенный поиск.Rails не обрабатывает параметры
У меня есть это в модели:
def self.filter(params)
params.inject(self) do |scope, (key, value)|
return scope if value.blank?
case key
when :min_size
scope.scoped(:conditions => ["size >= ?", value])
when :max_size
scope.scoped(:conditions => ["size <= ?", value])
else
scope.scoped(:conditions => ["created_at > ?", 4.weeks.ago])
end
end
end
Это в мой контроллер:
def search
@listings = Listing.filter(params)
respond_to (:html)
end
и я поиск с помощью этой формы:
<%= form_tag '/search', :method => "get" do |f| %>
<%= text_field_tag :min_size, params[:min_size] %>
<%= text_field_tag :max_size, params[:max_size] %>
<%= submit_tag "Search", :name => nil %>
<% end %>
Когда я пытаюсь для поиска Rails, похоже, игнорирует все переданные параметры и находит все записи с последним переключателем case («created_at>?», 4.weeks.ago). Тем не менее, Params не проходят:
Started GET "/search?utf8=%E2%9C%93&min_rent=10&max_rent=35" for 127.0.0.1 at Mon Jan 31 12:25:40 +0500 2011
Processing by ListingsController#search as HTML
Parameters: {"utf8"=>"✓", "min_size"=>"40", "max_size"=>"50"}
Listing Load (1.1ms) SELECT "listings".* FROM "listings" WHERE (created_at > '2011-01-03 07:25:40.978742') AND (created_at > '2011-01-03 07:25:40.980977') AND (created_at > '2011-01-03 07:25:40.982080') AND (created_at > '2011-01-03 07:25:40.983077') AND (created_at > '2011-01-03 07:25:40.984138')
В чем может быть проблема? В консоли он отлично работает
>> some = Listing.filter(:min_size => 40, :max_size => 50)
=> [#<Listing id: 1, title: "1 br apartment, Paris 16e", address: "1 Rue Monsieur-le-Prince", district: "Paris 6e", size: 42, rent: 2000, created_at: "2011-01-26 18:30:57", updated_at: "2011-01-26 19:00:44">]
Это работает! Спасибо. Как я мог пропустить это ... – Ghinzu
@Ghinzu, я рад слышать! Услышьте в StackOverflow, вы благодарите лучшего, приняв ответ, который сработал для вас. – hade
From SO faq: «Когда вы определили, какой ответ наиболее полезен для вас, отметьте его как принятый ответ, нажав на рамку на левой стороне ответа. Это позволяет другим людям знать, что вы получили хороший ответьте на ваш вопрос. Это полезно, потому что это показывает другим людям, что вы получаете ценность от сообщества ». – hade