Получить любой идентификатор для любого пользователя существует в базе данных

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

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

Другие вопросы по тегам