2012-07-27 60 views
0

我认为会是一个简单的问题,给我一些麻烦。我有一个与Devise/Omniauth进行认证的应用程序。当新用户注册并登录时,我希望他们被引导到几个问题(连续)询问:用设计更​​新方法覆盖redirect_to行为

  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”属性正在保存,我也无法正确覆盖默认的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"} 

任何输入的感谢! 谢谢。

回答

0

你不应该压倒一切的色器件更新操作,你需要是压倒一切色器件的

after_sign_in_path_for 

路线。您可以在登录后随时随地重定向用户,您应该将其放入应用程序控制器中。

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

+0

谢谢凯尔。这不仅仅是登录后的那一刻,这很重要。它是在重新定向填充饮料的表单之后。在提交饮料之后,用户被更新并且应该有另一个重定向到显示第二个问题(邻居)的页面。有什么想法吗?谢谢! – keypulsations 2012-07-27 21:31:38

+0

我会把这些问题提交给一个单独的表格,所以你不必担心设计。当你把更新放在更新行为中时发生了什么? – 2012-07-27 22:06:33