【问题标题】:Rails wicked gemRails 邪恶的宝石
【发布时间】:2015-05-28 10:18:16
【问题描述】:

我遇到了与登录和注销链接相关的问题。

我没有使用设计 gem

在我的代码中,我给出了以下链接

<% if current_user %>
  <li><%= link_to 'Logout',{:controller=>'sessions', :action=> 'destroy'}%></li>
<% else %>
  <li> <%= link_to 'Signup',{:controller =>'users', :action => 'new'} %> </li>
  <li> <%= link_to 'Login,{:controller =>'sessions', :action => 'new'} %> </li>
<% end %>

我正在使用 wicked gem,它也有以下步骤:

include Wicked::Wizard
steps :business, :login, :payment

如果用户在 users_controller 中输入新方法的 form_for 值并提交,用户会进入下一步,但上面显示的链接是“注销”,即用户在注册前已登录。

怎么办?

请提供任何解决方案

users_controller.rb:

 def new
    @user = User.new
  end

  def create
    @user = User.new(user_params)
    if @user.save
      @user.update_attributes(user_params )
      session[:user_id]= @user.id
      redirect_to user_steps_path
    else
      render :new
    end
  end

  private
  def user_params
    params.require(:user).permit( :fname, :lname, :email, :mob, :gender, :country, :state, :suburb, :postal ,:add)
  end
end

user_steps_controller.rb

include Wicked::Wizard
  steps :business, :login, :payment

  def show
    @user = current_user
    render_wizard
  end

  def update
    @user = current_user
    params[:user][:current_step] = step
    session[:user_id]= @user.id
    @user.update_attributes(user_params )
    render_wizard @user
  end

  private
  def redirect_to_finish_wizard(options = nil)
    redirect_to root_url
  end

  def user_params
    params.require(:user).permit( :current_step,:cmpyname, :abnacn, :cmpyadd, :cmpydet,:cash, :paypal,:bsb,:usrname,:password, :password_confirmation, :selcat, :protit, :prodes)
  end
end

类 ApplicationController

  protect_from_forgery with: :exception
  helper_method :current_user


  private
  def current_user
    @current_user ||= User.find(session[:user_id]) if session[:user_id]
  end

end

【问题讨论】:

  • 您能否详细说明您的多步骤表单,即您拥有的各个步骤以及您面临的具体问题是什么?
  • 所以虽然有用户记录,但您没有将注册归类为完整?听起来您需要用户(或演示者/装饰者,如果使用它们)的方法来指示注册已完成。然后你可以做if current_user &amp;&amp; current_user.sign_up_complete?
  • 谢谢@japed,但你能给出答案以表明注册已完成
  • @NitinRajan 不,就像 Adnan 说的那样,您没有指出用户必须执行哪些步骤才能被归类为完整注册。

标签: ruby-on-rails ruby-on-rails-4 wicked-gem


【解决方案1】:

如果用户已登录,只需查看您的视图即可显示您的步骤表单:

<% if user_signed_in?%>
instead of 
<% if current_user%>

【讨论】:

    【解决方案2】:

    创建后需要注销用户,可以这样操作

    if resource.save
      sign_out resource # resource = @user
    

    如果您正在使用设计,您可能需要为此覆盖设计注册控制器!

    编辑:

    在您的 create 操作中,您正在为新创建的用户设置会话,请从您的 create 操作中删除此行

     session[:user_id]= @user.id
    

    希望这会有所帮助!

    【讨论】:

    • 我没有使用设计
    • 你是如何处理认证的?
    • 我正在使用 bcrypt @RSB
    • 粘贴您的 current_user 方法
    • 粘贴 current_user 方法@RSB
    【解决方案3】:

    您应该检查&lt;% if session[:user_id].present? %&gt;,而不是检查 current_user

    或许能解决你的问题

    【讨论】:

    • 我没有使用设计
    • 那么你是如何获得 current_user 辅助方法的?
    • 使用 bcrypt gem-@adnan
    • 粘贴会话值[:user_id]
    猜你喜欢
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    • 2015-07-22
    • 1970-01-01
    • 2013-08-13
    • 1970-01-01
    • 2017-01-15
    • 1970-01-01
    相关资源
    最近更新 更多