Получить любой идентификатор для любого пользователя существует в базе данных
Я новичок в рельсах, и у меня есть задача, которая просит меня отправить приглашение любому администратору в моем журнале, вот мой кусок кода
def invite
inviteUser = { 'user_id' => current_user.id, 'Magazine_id' => params[:id] }
CollaborationInvitation.create(inviteUser)
@magazine = Magazine.find(params[:id])
redirect_to :back
rescue ActionController::RedirectBackError
redirect_to root_path
end
Мне нужно заменить current_user.id
с чем-то, что ссылается на любой идентификатор пользователя, который существует в моей базе данных, чтобы отправить ему приглашение быть администратором со мной, я попытался добавить @User=Users.All
и затем передать его как переменную, но это привело меня к ошибке. Я пробовал много вещей, но каждый раз, когда я получаю ошибку, кроме добавления current_user.id
PS: я использую устройство для аутентификации
3 ответа
Вы спросили пару вещей, и это немного сбивает с толку то, что вы хотите сделать.
Вот как вы получаете все идентификаторы записей в модели.
Rails4: User.ids
Rails3: User.all.map(&:id)
Или (не уверен, если #pluck
есть в рельсах 3 или нет)
User.pluck(:id)
Если вы хотите получить случайного пользователя (вы упомянули "любой пользователь"), вы можете это сделать.
User.find(User.pluck(:id).sample)
Хотя я думаю, что вы действительно хотите сделать, это передать идентификатор или какой-либо другой атрибут пользователя в качестве параметра действия и отправить этому пользователю приглашение.
Предположительно у вас есть пост или маршрут для "users#invite"
(действие, которое вы написали в своем вопросе). Вы можете добавить именованный параметр или передать параметр url, или, если вы используете почтовый маршрут, вы можете добавить параметр в тело сообщения.
Затем в вашем контроллере вы можете сделать что-то вроде этого (я буду использовать электронную почту в качестве атрибута):
def invite
@user = User.find_by(email: params[:user_email])
#Rails 3 like this
# @user = User.find_by_email(params[:user_email])
# now do stuff with user
end
User.all вернет вам коллекцию пользователей. Итак, найдите пользовательский объект, чтобы получить идентификатор... Попробуйте этот код....
def invite
inviteUser = { 'user_id' => User.find_by_email('user@example.com').id, 'Magazine_id' => params[:id] }
CollaborationInvitation.create(inviteUser)
@magazine = Magazine.find(params[:id])
redirect_to :back
rescue ActionController::RedirectBackError
redirect_to root_path
end
Ты можешь попробовать
User.last.id
или же
User.find_by_email("xyz@test.com").id
или же
User.where(email: "xyz@test.com").first.id
Замените xyz@test.com желаемым адресом электронной почты пользователя. Чтобы получить более подробную информацию об интерфейсе запроса активной записи rails, пожалуйста, прочитайте руководства по rails http://guides.rubyonrails.org/active_record_querying.html