Проблема с запросом активной записи - PullRequest
0 голосов
/ 31 октября 2010

Я создаю небольшое приложение на Rails, и сейчас я пытаюсь аутентифицировать пользователя.

Итак, я получил этот метод в классе контроллера:

def login
      if @user = User.authenticate(params[:txt_login], params[:txt_password])
          session[:current_user_id] = @user.id
          redirect_to root_url
      end
   end

Вот определение метода authenticate (внутри класса модели User):

 def self.authenticate(username, password)
      @user = User.where(["username = ? AND password = ?", username, password])
      return @user
  end

Проблема в том, что я получаю сообщение об ошибке:

undefined method `id' for #<ActiveRecord::Relation:0x92dff10>

Я подтверждаю, что пользователь, в которого я пытался войти, действительно существует в базе данных (кроме того, он пытается получить идентификатор пользователя, и эта инструкция заключена в if, если в случае 0 пользователи возвращаются из метода authenticate).

Почему я получаю это сообщение об ошибке? Зная, что когда я меняю User.where на User.find, все работает отлично!

Спасибо!

1 Ответ

1 голос
/ 31 октября 2010

User.where("some_conditions") вернет массив объектов User (простыми словами), A User.find может вернуть массив или отдельный объект (я не уверен, потому что я не понимаю, как вы его используете)

Насколько вы видите ActiveRecord :: Relation, это то, что возвращается, когда мы вызываем метод find или where или order в моделях Rails 3.

Кроме того, вы храните парольв виде простой строки, которая является плохой идеей, вы должны использовать некоторые доступные плагины аутентификации rails, такие как Devise или Authlogic.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...