Ruby on rails 使用不同的控制器创建用户
嘿,我正在制作一个有邀请系统的应用程序。当您被邀请时,您会收到一封电子邮件,允许您以用户身份注册该特定电子邮件。因此,我希望我的表单(邀请秀)允许受邀请的人完成注册,但电子邮件字段除外。我已经知道你的电子邮件了。但它总是告诉我电子邮件不能是空白的 所以我在想,当我尝试创建一个用户(邀请#显示)时,它总是返回到用户#创建控制器。这是我的问题吗?如果是,我有什么办法可以改变吗 邀请控制器Ruby on rails 使用不同的控制器创建用户,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,嘿,我正在制作一个有邀请系统的应用程序。当您被邀请时,您会收到一封电子邮件,允许您以用户身份注册该特定电子邮件。因此,我希望我的表单(邀请秀)允许受邀请的人完成注册,但电子邮件字段除外。我已经知道你的电子邮件了。但它总是告诉我电子邮件不能是空白的 所以我在想,当我尝试创建一个用户(邀请#显示)时,它总是返回到用户#创建控制器。这是我的问题吗?如果是,我有什么办法可以改变吗 邀请控制器 class InvitationsController < ApplicationController
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
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
与其以单独的形式处理受邀请的用户创建,不如在其中仍然使用users#new和handling params[:invite_token],例如:
def new
@user = User.new
@invitation = Invitation.find_by_invite_token(params[:invite_token]) if params[:invite_token].present?
end
表单应该有一个隐藏的_字段和删除email_字段的条件,例如:(在erb中,因为我不习惯使用haml)
您可能还想在@invitation code to before_filter中去掉@invitation code to before_,以使内容整洁,并检查@invitation.email是否已在其中使用而不是以单独的形式处理受邀用户的创建,可能还是在其中使用users#new和handling params[:invitate_token]更好,例如:
def new
@user = User.new
@invitation = Invitation.find_by_invite_token(params[:invite_token]) if params[:invite_token].present?
end
表单应该有一个隐藏的_字段和删除email_字段的条件,例如:(在erb中,因为我不习惯使用haml)
您可能还想取出@invitation code to before_filter使事情整洁,并检查@invitation.email是否已经在那里使用这看起来是个好主意(嘿,在lol之前您没有回答我的问题),但我无法获得指向用户的链接,新的用户保持参数[:invitation_token]我尝试重定向到新的用户路径(params[:invite_token])是的,在fb组:)无论如何尝试新的用户路径(invite_token:params[:invite_token])我得到“电子邮件不能为空”我查看控制台,发现@Invitation.find_by_invitage_token(params[:invitate_token])未对用户#createcheck创建操作接收的参数进行操作,是否有正确的invite#U令牌?如果没有,请检查新用户表单是否有正确值的invite#U令牌隐藏字段#标记。它确实有正确的invite#U令牌,因此在用户#new page i put=@INVITENT中,并获得了它的值这看起来是一个不错的选择想法(嘿,在lol之前你没有回答我的问题吗)但是我无法获得一个指向用户新的链接,该链接保留了params[:invite_token]我试图重定向到新的用户路径(params[:invite_token])是的,在fb组:)无论如何尝试新的用户路径(invite_token:params[:invite_token])我得到“电子邮件不能为空”我查看控制台,发现@Invitation.find_by_invite_令牌(params[:invite_令牌])未对用户#createcheck创建操作接收到的参数进行操作,它是否具有正确的invite#U令牌?如果没有,请检查新用户窗体是否具有具有正确值的invite#U token HIGHED#field#U标记。它确实具有正确的invite#U令牌,以至于在用户#new page i put=@INVITINCT中获得了它的值
<% if @invitation.nil? %>
<%= f.email_field :email %>
<% else %>
<%= hidden_field_tag :invite_token, @invitation.invite_token %>
<% end -%>
def create
@invitation = Invitation.find_by_invite_token(params[:invite_token]) if params[:invite_token].present?
params[:user][:email] = @invitation.email unless @invitation.nil?
@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