Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用不同的控制器创建用户_Ruby On Rails_Ruby_Ruby On Rails 3 - Fatal编程技术网

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