Rails邪恶的宝石

时间:2015-05-28 10:18:16

标签: ruby-on-rails ruby-on-rails-4 wicked-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 %>

我正在使用邪恶的宝石,它也有以下步骤:

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

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

怎么办?

请给予任何解决方案

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

class ApplicationController&lt;的ActionController ::基

  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

3 个答案:

答案 0 :(得分:0)

您需要在创建用户后退出用户,您可以执行此类操作

if resource.save
  sign_out resource # resource = @user

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

编辑:

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

 session[:user_id]= @user.id

希望这有帮助!

答案 1 :(得分:0)

您应该检查<% if session[:user_id].present? %>

,而不是使用current_user进行检查

它可以解决您的问题

答案 2 :(得分:0)

如果用户已登录以显示您的步骤表单,请检查您的观看次数:

{
 "error": {
  "code": 500,
  "message": null
 }
}