2014-09-15 4 views
1

я работаю на рубин на рельсах и пытается проверить базу данных для входа в аккаунтROR ActiveRecord где проверить

вот мой код модели код

def self.signIn(form) 
    user=Users.where(username: form[:username], password:form[:password]) 
    return user 
end 

и мой код контроллера

def sigin_action 
@hello = Users.signIn(params) 
render :text => @hello 
end 

но выход всегда «#», проблема в том, что я много искал, но не смог найти решение

+2

Использование 'Users.where (имя пользователя: форма [: имя пользователя], пароль: форма [: пароль]) .first' – Santhosh

+0

спасибо, это сработало –

+0

Я добавил его в качестве ответа. :) – Santhosh

ответ

1

У вас есть какие-то другие проблемы

  1. Ваш Model должен быть сингулярным (ваш множественное число)
  2. Вы упоминаете вы хотите до проверить наличие вашего поиска - наверняка вы бы лучше wi го .exists?

Модель

Во-первых, вам нужно make sure your model name is Singular

Хотя основной причиной для Rails конвенций, он служит, чтобы предоставить вам более прочной структуры для MVC programming pattern. Важность этого сводится к тому, как Rails построен как основа object orientated

Не вдаваясь в подробности, позвольте мне просто сказать, что по мере продвижения с Rails вы начнете видеть доказательства ориентации объекта Ruby во всей структуре. Это означает, что каждый раз, когда вы выполняете какой-либо метод/создаете какие-либо функции, он будет основываться на объектах.

Таким образом, каждый раз, когда вы вызываете «модель», вы не вызываете класс - вы вызываете объект. Вот почему модели называются сингулярно - они предоставляют вам возможность вызывать серию данных из вашей базы данных, сжимая их все в ваш модельный объект. В смысле Rails он дает вам возможность вызвать User.find 1, чтобы создать нового пользователя .

Итог: называть свои модели их особым именем


Exists

Это, вероятно, не то, что вам нужно, но есть еще один метод ActiveRecord называется .exists?, если вы хотите , Это вернет логическое значение (true/false) в зависимости от наличия данных из вашего запроса в db.

Когда вы говорите, что вы хотите check database for SIGNIN, вы бы, возможно, лучше со следующим:

#app/models/user.rb 
class User < ActiveRecord::Base 
    def self.signIn(form) 
     return self.exists?(username: form[:username], password: form[:password]) 
    end 
end 
2

ActiveRecord#where возвращает объект отношения. Для того, чтобы получить доступ к объекту (ы), вы можете либо цикл, или, если вы ожидаете только одну запись, вызов first

Users.where(username: form[:username], password: form[:password]).first 
0

render :text => @hello равно

hello = @hello.to_s 
render :text => hello 

Поскольку ruby#instance.to_s будет #xxxxx как строка , поэтому вы получите некоторый текст.

Думаю, вы должны вынести результат, как:

respond_to do |format| 
    format.html 
    format.json { render json: @hello } 
end 
Смежные вопросы