0

我认为是一个简单的问题给我带来了一些麻烦。我有一个使用 Devise/Omniauth 进行身份验证的应用程序。当一个新用户注册并登录时,我希望他们被引导到几个问题(连续)问:

  1. 他们喜欢什么饮料?(咖啡,饮料,两者)
  2. 哪些社区对他们来说很方便?

我的用户模型有一个“preferred_beverage”属性以及三个preferred_neighborhood_# 属性(preferred_neighborhood_one、preferred_neighborhood_two、preferred_neighborhood_three)。

当用户登录时,我想检查他们是否是新用户,如果是,将他们引导至问题 1 的页面:

<div class="center hero-unit">
  <h2>What do you like to drink?</h2>

    <%= form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :method => :put }) do |f| %>

    <%= f.radio_button :preferred_beverage, 'Coffee', :checked => true %> 
    <%= label :preferred_beverage, 'Coffee' %>
    <%= f.radio_button :preferred_beverage, 'Drink' %> 
    <%= label :preferred_beverage, 'Drink' %>
    <%= f.radio_button :preferred_beverage, 'Both' %> 
    <%= label :preferred_beverage, 'Both' %>

    <%= f.submit "Next", class: "btn btn-large btn-primary" %>

  <% end %>
</div>

问题是,在提交此表单时,即使用户的“preferred_beverage”属性正在保存,我也无法正确覆盖默认的设计“更新”方法,该方法似乎正在处理对用户的任何修改并重定向到 root_path。我想在提交“preferred_beverage”后直接重定向到我的 /app/views/neighborhood_survey/new.html.erb 表单。

我到底需要在我用来覆盖默认设计注册控制器的这个registrations_controller.rb的“更新”部分中添加什么?

应用程序/控制器/registrations_controller.rb

class RegistrationsController < Devise::RegistrationsController

  def create
    super
    session[:omniauth] = nil unless @user.new_record?
  end

  def update
  end

  private
  def build_resource(*args)
    super
    if session[:omniauth]
      @user.apply_omniauth(session[:omniauth])
      @user.valid?
    end
  end
end

我完成了以下操作,以确保我的 registrations_controller 使用以下内容覆盖了设计注册控制器:

routes.rb

    devise_for :users, path_names: {sign_in: "login", sign_out: "logout"},
                       controllers: {omniauth_callbacks: "omniauth_callbacks", :registrations => "registrations"}

任何输入表示赞赏!谢谢你。

4

1 回答 1

0

您不应该覆盖设计更新操作,您需要覆盖

after_sign_in_path_for

设计路线。在用户登录后,您将能够将用户重定向到任何您喜欢的位置。您应该将其放入您的应用程序控制器中。

http://rubydoc.info/github/plataformatec/devise/master/Devise/Controllers/Helpers#after_sign_in_path_for-instance_method

于 2012-07-27T21:08:56.967 回答