我认为是一个简单的问题给我带来了一些麻烦。我有一个使用 Devise/Omniauth 进行身份验证的应用程序。当一个新用户注册并登录时,我希望他们被引导到几个问题(连续)问:
- 他们喜欢什么饮料?(咖啡,饮料,两者)
- 哪些社区对他们来说很方便?
我的用户模型有一个“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"}
任何输入表示赞赏!谢谢你。