Hey je fais une application qui a un système d'invitation. Lorsque vous êtes invité, vous recevez un e-mail vous permettant de vous inscrire en tant qu'utilisateur avec cet e-mail spécifique. J'ai donc voulu que mon formulaire (invitation # show) permette à une personne invitée de compléter son inscription à l'exception d'un champ email. Être comment je connais déjà votre email. Mais cela me dit toujours que le courrier électronique ne peut pas être vide.Créer un utilisateur avec un contrôleur différent
Donc, je pense que lorsque je tente de créer un utilisateur (invitation # show), cela revient toujours à l'utilisateur # create controller. Est-ce mon problème, et si oui, y a-t-il un moyen de changer cela?
invitations contrôleur
class InvitationsController < ApplicationController
def new
@invitation = Invitation.new
end
def create
@invitation = current_user.invitations.new(params[:invitation])
if @invitation.valid?
temp_email = @invitation.email
if User.find_by_email(temp_email)
flash.now.alert = "This email was already invited!"
render "new"
else
@invitation.save
redirect_to root_url, :notice => "Invitation sent!"
UserMailer.invitation(@invitation).deliver
end
else
render "new", :notice => "Somehting went wrong!"
end
end
def show
@invitation = Invitation.find_by_invite_token(params[:invite_token])
@user.email = @invitation.email
if @user.save
@user.email_activation_token = true
cookies[:auth_token] = user.auth_token
redirect_to root_url, :notice => "Welcome!"
else
render "new", :notice => "Something went wrong!"
end
end
def accept_referral
@invitation = Invitation.find_by_invite_token(params[:invite_token])
@invitation.accepted_at = Time.zone.now
@invitation.save!
if cookies[:auth_token]
cookies.delete(:auth_token)
end
@user = User.new
render "show"
end
end
utilisateurs contrôleur
class UsersController < ApplicationController
before_filter :admin_and_user, only: [:destory, :edit, :show]
before_filter :admin_user, only: :index
def new
@user = User.new
end
def create
@user = User.new(params[:user])
if @user.save
UserMailer.registration_confirmation(@user).deliver
redirect_to root_url, :notice => "Signed up!"
else
render "new"
end
end
# invitation montrent
= form_for @user do |f|
- if @user.errors.any?
.error_messages
%h2 Form is invalid
%ul
- for message in @user.errors.full_messages
%li
= message
%p
= f.label :name
= f.text_field :name
%p
= f.label :password
= f.password_field :password
%p
= f.label :password_confirmation
= f.password_field :password_confirmation
%p.button
= f.submit
cela ressemble à une bonne idée (hey avez-vous pas répondu à mes questions avant lol) mais je ne peux pas obtenir un lien à l'utilisateur # nouvelle qui maintient params [: invite_token] J'ai essayé redirect_to new_user_path (params [: invite_token]) –
Eh oui, dans le groupe fb :) essayer quand même new_user_path (invite_token: params [: invite_token]) – Roy
Je reçois "email ne peut pas être vide" J'ai regardé la console et j'ai trouvé que @ Invitation.find_by_invite_token (params [: invite_token]) ne fonctionne pas sur l'utilisateur # créer –