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 は nil です。どういうわけか、データベース内のデータを指していません。

4

1 に答える 1

0

Ok

この行を変更してみてください

@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 のメソッド (モデル) データベースで tech が 1 か 0 だと思いますか?

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

今、あなたはすることができます

@user.tech?

そして、それは ture または false を返します

于 2013-01-15T15:45:41.703 に答える