2016-04-02 2 views
0

У меня вопрос о чем-то странном, что происходит со мной.Не удается найти Пользователи, созданные seeds.rb

У меня есть приложение рельсы, которые я предварительно заполнены некоторые заранее определенные пользователями, я запускаю команду rake db:seed и это создает те пользователи, я проверяю с rails c и запустить User.all там они. Я запускаю User.find(1), он возвращает пользователя. Без проблем.

Но, когда я запустить приложение, у меня есть в одном из моих user.rb, следующий код

User.find(1) # I know that this user will have a fixed id throughout every environment

Но ... это не найти, я получаю ActiveRecord::RecordNotFound исключение.

Моя цель, после создания нового пользователя в базе данных, получить приветственное сообщение от User.find(1). Может ли это быть связано с тем, что это в пределах обратного вызова ActiveRecord, after_commit

EDIT:

Мой код прост, после создания нового пользователя, он recieves сообщение от пользователя where(email: "theemail").first

Так что мой user.rb модель имеет следующие фрагменты:

after_commit :send_welcome_message 

def send_welcome_message 
    welcome_user = User.where(email: "xyz").first 
    Conversation.send_welcome_message(self, welcome_user) 
end 

Я поместил отладчик в send_welcome_message проверил User.all.size и вернулся 1. Я использовал консоль рельсов, и тот же запрос, возвращено 5.

+0

Вы используете ** rake db: seed ** в той же среде, в которой работает система? Я имею в виду ... можно использовать RAILS_ENV = test rake db: seed **, а затем ** RAILS_ENV = рельсы разработки s **, и тогда будет путаница. –

+0

Я знаю, что это тупой вопрос, который я сделал. Но это происходит. Черт, бывает, вы знаете ... –

+1

Нет такой вещи, как глупые вопросы, я не указывал среду рельсов, но она была в разработке – tvieira

ответ

1

Так что ваш пользователь с идентификатором 1 не найден. Это не означает, что у вас нет доступа к использованию, создаваемому вашими семенами. При удалении всех пользователей номера идентификаторов необязательно будут сброшены до 1.

I.e. если вы удаляете пользователя 1, у следующего создаваемого вами пользователя все равно будет ID 2

Решение, вероятно, должно использовать несколько способов поиска пользователя. То есть вы можете установить для них специальные name в свои семена, а затем посмотреть их позже, используя это имя.

+0

курица, мы можем предложить OP сделать ** rake db: drop ** и ** rake db: создать **, чтобы воссоздать базу данных перед ее посевом. Это поможет узнать, действительно ли это проблема. –

0

При создании трех пользователей, а затем удалить их все, вы четвёртый пользователь будет иметь значение идентификатора 4. Вы можете проверить это, проверяя идентификаторы пользователей, когда вы называете User.all

Как уже упоминался выше, @maxpleiner, возможно, их можно будет найти по-другому, возможно, по их имени. Блок after commit может помешать вам передать этого пользователя вокруг приложения, поскольку он вызывает себя изолированно. Как уже упоминалось в Rails: Can you pass arguments to the after_create method?, вы не можете передать запись в файл после создания. Что вы можете сделать, так это добавить какой-то пользовательский код, который будет размещен сразу же после создания пользователя, который будет обрабатывать ваш прецедент.

Смежные вопросы