0

我正在尝试根据数据库中的值进行重定向。

例如,如果技术人员登录,他们应该被重定向到站点 A,否则其他所有人都应该被重定向到站点 B。

到目前为止,我的尝试如下

  def create
    @user_session = UserSession.new(params[:user_session])
    @user = User.new(params[User.where(:username => @user_session.username)])
    #@user = UserUser.where(:username => @user_session.username)
    #@user = User.select("tech").find(@user)
    #@user = User.new
    respond_to do |format|
      if @user_session.save
        if @user.tech == 1
          format.html { redirect_to '/tech/index', notice: 'Login Successful A Company' }
        else
          format.html { redirect_to :users, notice: @user.tech }
        end
      else
        format.html { render action: "new" }
      end
    end
  end 

问题是 if 语句总是解析为 else 语句中的代码,而不是 else 语句上方的代码。在这种情况下,@user.tech 为零我不知何故没有指向数据库中的数据

4

1 回答 1

0

尝试更改此行

@user = User.new(params[User.where(:username => @user_session.username)])

在这里,您做了一些奇怪的事情,我认为您应该收到一条错误消息。@user 只是内存中 User 模型的一个新实例

我想你需要这个

@user = User.where(:username => @user_session.username)]).first

但是,如果用户名不是唯一的,这是一个安全问题。管理员可以与用户同名所以你应该做类似的事情

@user = User.where(:id => @user_session.user_id)]).first

技术?user.rb (模型)中的方法我猜数据库中的技术是 1 还是 0?

class User
    def tech?
      tech == 1 #
    end
end

现在你可以做

@user.tech?

它会返回 ture 或 false

于 2013-01-15T15:45:41.703 回答