我认为会是一个简单的问题,给我一些麻烦。我有一个与Devise/Omniauth进行认证的应用程序。当新用户注册并登录时,我希望他们被引导到几个问题(连续)询问:用设计更新方法覆盖redirect_to行为
- 他们喜欢什么饮料? (咖啡,喝,都)
- 什么社区方便他们?
我的用户模型有一个“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”属性正在保存,我也无法正确覆盖默认的Devise“update”方法,这似乎是处理对用户的任何修改并重定向到root_path。我想在提交'preferred_beverage'后直接重定向到我的/app/views/neighborhood_survey/new.html.erb表单。
我需要将这个registrations_controller.rb的“更新”部分放到什么位置,我正在使用它来覆盖默认的Devise registrations_controller?
应用程序/控制器/ 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"}
任何输入的感谢! 谢谢。
谢谢凯尔。这不仅仅是登录后的那一刻,这很重要。它是在重新定向填充饮料的表单之后。在提交饮料之后,用户被更新并且应该有另一个重定向到显示第二个问题(邻居)的页面。有什么想法吗?谢谢! – keypulsations 2012-07-27 21:31:38
我会把这些问题提交给一个单独的表格,所以你不必担心设计。当你把更新放在更新行为中时发生了什么? – 2012-07-27 22:06:33