【问题标题】:Multi-form in rails using Wicked Gem and Devise使用 Wicked Gem 和 Devise 在轨道中实现多种形式
【发布时间】:2016-02-02 12:46:42
【问题描述】:

我正在尝试使用 Wicked gem 设置多表单登录系统。执行以下步骤时,我的设计已安装并正常运行:http://railscasts.com/episodes/346-wizard-forms-with-wicked

我没有被重定向到 user_step_paths?一切都按照教程中的说明完成,但是,我猜是因为我使用的是设计,所以我需要在设计继承的控制器中进行操作?我的控制器代码如下:

users_controller.rb

class UsersController < Devise::RegistrationsController
  def new
    @user = User.new
  end
  def create
      @user = User.new(params[:sign_up])
      if @user.save
        session[:user_id] = @user.id
        redirect_to user_steps_path
      else
        redirect_to new_user_registration_path
      end
  end
end

users_steps_controller.rb

class UserStepsController < ApplicationController

  include Wicked::Wizard
  steps :education, :social

  def show
    render_wizard
  end

end

路线

  get 'pages/home'
  devise_for :users, :controllers => { :registrations => 'users'}  
  resources :user
  resources :user_steps

【问题讨论】:

  • 你能确定创建动作是否被击中吗?尝试在 create 方法的开头添加“raise 'creating user..'”,看看是否在浏览器中引发错误。如果是这样,请将其取出,然后在尝试保存用户时检查是否有任何错误:“raise @user.errors.messages”。把它放在 redirect_to new_user_registration_path 行之前。
  • 当您尝试发送注册表单时,您会登录吗?还是显示任何错误?
  • 能否请您添加您的注册表单?我需要检查表单发送数据的路径。
  • 我推荐看一下这个例子railscasts.com/episodes/217-multistep-forms

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


【解决方案1】:

1.需要控制器中的更新方法,需要在show方法中定义用户:

def show
    @user = current_user
    render_wizard
  end

  def update
    @user = current_user
    @user.update_attributes(user_params)
    render_wizard @user
  end

2.需要生成设计控制器:

rails generate devise:controllers [scope]

3.更新设计的registration_controller

class Users::RegistrationsController < Devise::RegistrationsController
# before_filter :configure_sign_up_params, only: [:create]
# before_filter :configure_account_update_params, only: [:update]

  # GET /resource/sign_up
   def new
     super
   end

  # POST /resource
   def create
     super
   end

  # GET /resource/edit
  # def edit
  #   super
  # end

  # PUT /resource
   def update
     super
   end

# The path used after sign up.
   def after_sign_up_path_for(resource)
     user_steps_path
   end

  # The path used after sign up for inactive accounts.
   def after_inactive_sign_up_path_for(resource)
     super(resource)
   end
end

4.此控制器无效,需使用设计生成的控制器:

class UsersController < Devise::RegistrationsController

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-06
    • 2011-12-13
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多