0

我使用 Devise gem 进行user登录、允许:email:passwordWicked gemprofile完成、允许first_name、、、和。User 模型和Profile 模型。for Profile 在views/devise/registrations/new.html.erb 中设置为隐藏字段。我将对此问题进行解释,然后列出相关代码。last_nameusernamebiohas_one :profileaccepts_nested_attributes_for :profilebelongs_to :useruser_id

我一遍又一遍地浏览了设计和邪恶的文档,但我无法弄清楚这个问题。我的 Wicked 控制器是 after_signup_controller。我插入binding.pryafter_signup#show 并看到通过注册过程并没有击中该控制器/动作。似乎注册后,Wicked Wizard 被跳过了。我将“/after_signup/name”(名称是我在 Wicked 中的第一步)附加到 localhost URL,在 after_signup#show 中使用 binding.pry,并看到 Wicked 完成了我的所有步骤。这使我认为某些东西正在覆盖通往向导的路线。

有没有人尝试过像这样使用 Devise 和 Wicked?如果您能看到为什么 Wicked 的路线在注册后被覆盖,请告诉我。


Rails.application.routes.draw do
  resources :profiles
  resources :posts

  devise_for :users, controller: {
    confirmations:  'users/confirmations',
    # omniauth_callbacks: 'users/omniauth_callbacks'
    passwords:      'users/passwords',
    registrations:  'users/registrations',
    sessions:       'users/sessions',
    unlocks:        'users/unlocks'
  }

  #Wicked Wizard
  resources :after_signup

  root 'posts#welcome_page'

end
class Users::RegistrationsController < Devise::RegistrationsController
  def new
    super
  end

  def create
    super
  end

  protected

  def after_sign_up_path_for(resource)
    '/after_signup'
  end
end

class AfterSignupController < ApplicationController
  include Wicked::Wizard

  steps :name, :username, :bio, :image

    def show
      binding.pry
      @profile = current_user.profile
      render_wizard(@profile)
    end

    def update
      @profile = current_user.profile
      @profile.update(profile_params)
      render_wizard(@profile)
    end

    private

    def profile_params
      params.require(:profile).permit(:username, :first_name, :last_name, :bio, :image, :user_id)
    end
end

class ApplicationController < ActionController::Base
  before_filter :configure_permitted_parameters, if: :devise_controller?

  private

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:email, :password, :password_confirmation, profile_attributes: [:user_id, :first_name, :last_name, :username, :bio, :image])}
    devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:email, :password, :password_confirmation, profile_attributes: [:user_id, :first_name, :last_name, :username, :bio, :image])}
    devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:login, :username, :email, :password, :remember_me) }
  end
end


##name.html.erb
<%= bootstrap_form_for(@profile, url: wizard_path, method: :put) do |f| %>
<div class="row">
  <div class="field col-xs-8 col-sm-6">
    <div class="field">
      <%= f.text_area :first_name, autofocus: true %>
      <%= f.text_area :last_name, autofocus: true %>
    </div>
  </div>
</div>
<% end %>

<div class="actions">
  <%= f.submit "Next", :class => 'btn btn-primary' %>
  or <%= link_to "skip", next_wizard_path %>
</div>


##username.html.erb
<%= bootstrap_form_for(@profile, url: wizard_path, method: :put) do |f| %>
<div class="row">
  <div class="field col-xs-8 col-sm-6">
    <div class="field">
      <%= f.text_area :username, :placeholder => 'username' autofocus: true %>
    </div>
  </div>
</div>
<% end %>

<div class="actions">
  <%= f.submit "Next", :class => 'btn btn-primary' %>
  or <%= link_to "skip", next_wizard_path %>
</div>


##bio.html.erb
<%= bootstrap_form_for(@profile, url: wizard_path, method: :put) do |f| %>
<div class="row">
  <div class="field col-xs-8 col-sm-6">
    <div class="field">
      <%= f.text_area :bio, autofocus: true %>
    </div>
  </div>
</div>
<% end %>

<div class="actions">
  <%= f.submit "Next", :class => 'btn btn-primary' %>
  or <%= link_to "skip", next_wizard_path %>
</div>


##image.html.erb
<%= bootstrap_form_for(@profile, url: wizard_path, method: :put) do |f| %>
<div class="row">
  <div class="field col-xs-8 col-sm-6">
    <div class="field">
      <%= f.text_field :image, autofocus: true %>
    </div>
  </div>
</div>
<% end %>

<div class="actions">
  <%= f.submit "Submit", :class => 'btn btn-primary' %>
</div>

这是我第一次向 Stack Overflow 发布问题。除了解决这个问题,如果我列出了太多文件,请告诉我。

4

0 回答 0