2012-07-27 62 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