Поиск Rails с параметрами игнорирования активного ресурса - PullRequest
0 голосов
/ 29 декабря 2011

У меня есть два приложения Rails, один клиент, использующий ActiveResource, и один сервис. Я тестирую следующую команду через консоль:

User.find(:all, :params => {:email_address => "myemail@domain.com"})

Я получаю обратно все записи в моей пользовательской таблице, а не только ту, которая указана в моем параметре электронной почты.

Когда я смотрю журнал моего сервисного приложения, он выглядит следующим образом

Started GET "/users.json?email_address=myemail%40domain.com" for 127.0.0.1 at 2011-12-29 11:29:06 -0600
   (0.4ms)  SHOW search_path
  Processing by UsersController#index as JSON
  Parameters: {"email_address"=>"myemail@domain.com"}
  User Load (0.7ms)  SELECT "users".* FROM "users" 
Completed 200 OK in 40ms (Views: 35.7ms | ActiveRecord: 3.3ms)

Мой параметр не был включен в оператор SQL.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 30 декабря 2011

Исходя из вашего комментария к исходному вопросу, ваш контроллер по-прежнему выглядит следующим образом:

class UsersController < ActionController::Base 
 def index
   @users = User.all
   respond_to do |format|
     format.json { render json: @users }
   end
 end
   #other methods down here
end

Но для того, чтобы ваш индекс отображал только те, которые соответствуют электронной почте, вам необходимо обновитьиндексный метод:

class UsersController < ActionController::Base 
 def index
   @users = User.find_all_by_email_address(email_address)
   respond_to do |format|
     format.json { render json: @users }
   end
 end
   #other methods down here
end
0 голосов
/ 29 декабря 2011

Условия передаются методу ActiveRecord find через параметр :conditions, а не :params. Так что ваш find звонок должен быть таким:

User.find(:all, :conditions => { :email_address => "myemail@domain.com" })

или более в стиле Rails 3:

User.where(:email_address => "myemail@domain.com").all

Полный список доступных параметров для метода find можно найти в документах .

...