2016-03-18 30 views
0

Rails 4.2.5 kullanıyorum. Ben aşağıdaki alanları içeren bir kullanıcı modeli: Ben ayrıca bu alanları düzenleme ile başa çıkmak için benim denetleyicisi (./app/controllers/users_controller.rb) bir yöntemine sahipYalnızca kullanıcı modeli alanları belirli değerler içeriyorsa, giriş yaptıktan sonra sayfaya nasıl yönlendiririm?

height_feet 
height_inches 
weight 

...

def edit 
    @user = User.find(session["user_id"]) 
    render 'edit' 
    end 

Ancak, istediğim, bu alanların tümü boşsa, kullanıcı oturum açtığında, kullanıcının bu alanları düzenledikleri sayfaya yeniden yönlendirilmesini istiyorum. Bunu nasıl kuracağından emin değilim. Ben kimlik doğrulaması için üçüncü parti sağlayıcıları (örneğin, Google, Facebook) kullandıkları için benim config/routes.rb dosyasında ben

root 'pages#index' 

    get '/auth/:provider/callback', to: 'sessions#create' 

var. Ne yapmak istediğimi barındırmak için başka ne yapmam gerektiğini bilmiyorum.

Düzenleme: Eğer varsa,

after_filter :verify_user_fields 

def verify_user_fields 
    if current_user.present? && current_user.weight.blank? && current_user.height_feet.blank? && current_user.height_inches.blank? 
    redirect_to edit_user_path(current_user) 
    end 
end 

alternatif "./app/controllers/sessions_controller.rb" dosyası için kod ...

class SessionsController < ApplicationController 

    def create 
    begin 
     @user = User.from_omniauth(request.env['omniauth.auth']) 
     session[:user_id] = @user.id 
     flash[:success] = "Welcome, #{@user.name}!" 
    end 

    redirect_to url_for(:controller => 'user_objects', :action => 'index') 
    end 

    def destroy 
    if current_user 
     session.delete(:user_id) 
     flash[:success] = 'See you!' 
    end 
    redirect_to root_path 
    end 

end 

cevap

0

application_controller.rb Dahil oturum denetleyicisi olarak, aşağıdaki gibi bir şey söyleyebilirsiniz: Bir oturum denetleyicisiyle, ayrıca, koşullandırmayı oluşturma eylemine koymak yerine bir sonraki yeniden düzenleme çağrısı seçeneğine de sahipsiniz.

+0

Ne kontrolör/yöntem ben bu koyuyorum Rails kullanmak iyi bir fırsattır? – Dave

+0

İşlenmesi gereken birkaç yol var, ancak uygulama denetleyicisindeki bir yönteme koyarım ve sonra yöntemi before_filter aracılığıyla çağırırdım. Bunu daha iyi göstermek için cevabımı güncelleyeceğim. – toddmetheny

+0

Teşekkürler, benim quesiton düzenledim çünkü ben kullanıcı hemen giriş yaptıktan sonra ve sadece bu alanlar boşsa, düzenleme sayfasını görmesini istiyorum bahsetmeyi ihmal ettim. Giriş yaptıktan sonra bu sayfaya gitmek için yönlendirmeyi nasıl bağlarım? – Dave

1

Bu strong parameters.

User Controller 

def update 
@user = User.find(params[:id]) 

if @user.update(user_params) 
    flash[:success] = "Your account was successfully updated!" 
    redirect_to @user 
else 
    flash[:error] = "There was an error updating your account." 
    render :edit 
end 
end 

private 

def user_params 
params.require(:user).permit(:height_feet, :height_inches, :weight) 
end 
+0

Noktaları birleştirmiyorum. Bunu hangi denetleyiciye koydum? Kullanıcı kontrolörü mü? – Dave

+0

Evet, Kullanıcı Denetleyicide. Tüm yöntemi göstermek için cevaplarımı düzenledim. –

+0

, aslında soruda dile getirilen sorunları ele almıyor. Bu belirli şeylerin varlığını kontrol etmez ve yalnızca oturum açmada değil, güncellemede çalışır. – toddmetheny

İlgili konular