2015-08-13 48 views
-1

nil用戶點擊「註冊」,他鼓勵被記錄在之前提交一個目標,習慣和價值如何跳過會話創建?

但他可以通過點擊跳過這些形式之一:

enter image description here

的問題是,如果他跳過一個形式,現在則一個錯誤信息彈出:

TypeError in UsersController#create 
no implicit conversion of nil into String 

在這個例子中,我跳過了習慣的形式,因此正在對上調

users_controller

def create 
    @user = User.new(user_params) 
    if @user.save 
     # Goals 
     name = session.delete(:goal_name) 
     deadline = session.delete(:goal_deadline) 
     # Values 
     vname = session.delete(:valuation_name) 
     vimage = session.delete(:valuation_image) 
     # Habits 
     date_started = session.delete(:habit_date_started) 
     committed = session.delete(:habit_committed) 
     trigger = session.delete(:habit_trigger) 
     action = session.delete(:habit_action) 
     target = session.delete(:habit_target) 
     reward = session.delete(:habit_reward) 
     missed_days = session.delete(:habit_missed_days) 
     # Create 
     @user.habits.create(date_started: Date.parse(date_started), committed: committed, trigger: trigger, action: action, target: target, reward: reward, missed_days: missed_days).create_with_current_level 
     @user.goals.create(name: name, deadline: deadline) 
     @user.valuations.create(name: vname, image: vimage) 
     @user.send_activation_email 
     redirect_to root_url 
    else 
     render 'new' 
    end 
    end 

我們如何才能讓用戶跳過?我一直試圖包括各種if/else陳述,但我很難設置正確的方法來觸發條件。

+0

上沒有錯誤發生什麼線? – blnc

+0

@blnc它發生在我跳過的任何形式上,所以在這個例子中,我跳過了習慣形式,因此它在@ user.habits.create( –

+0

)上被提出。它應該告訴你錯誤發生在哪一行。可能結果試圖爲需要「String」值的對象分配一個「Nil」值 –

回答

1

我打算假設他們提交表單時所有的值都被填充。這就是說:

users_controller

def create 
    @user = User.new(user_params) 
    make_habit = false 
    make_goal = false 
    make_valuation = false 

    if @user.save 
     # Goals 
     name = session.delete(:goal_name) 
     deadline = session.delete(:goal_deadline) 
     make_goal = true if !name.blank? && !deadline.blank? 

     # Values 
     vname = session.delete(:valuation_name) 
     vimage = session.delete(:valuation_image) 
     make_valuation = true if !vname.blank? && !vimage.blank? 

     # Habits 
     date_started = session.delete(:habit_date_started) 
     committed = session.delete(:habit_committed) 
     trigger = session.delete(:habit_trigger) 
     action = session.delete(:habit_action) 
     target = session.delete(:habit_target) 
     reward = session.delete(:habit_reward) 
     missed_days = session.delete(:habit_missed_days) 
     make_habit = true if !date_started.blank? && !committed.blank? #(... continue for whatever else you want to make sure is there) 

     # Create 
     @user.habits.create(date_started: Date.parse(date_started), committed: committed, trigger: trigger, action: action, target: target, reward: reward, missed_days: missed_days).create_with_current_level if make_habit 
     @user.goals.create(name: name, deadline: deadline) if make_goal 
     @user.valuations.create(name: vname, image: vimage) if make_valuation 
     @user.send_activation_email 
     redirect_to root_url 
    else 
     render 'new' 
    end 
    end 
+0

它保持超時,我會繼續使用它'Net :: ReadTimeout(Net :: ReadTimeout): app/models/user.rb:125:'send_activation_email' app/controllers/users_controller.rb:58:'create'' –

+0

這與你的郵件配置有關,它試圖聯繫服務器而沒有得到響應。 @ user.send_activation_email並查看它是否有效 – blnc

+0

當我將激活電子郵件註釋掉時,它重定向回到'root_url',所以我猜這部分工作,但是這會創建另一個專業版以前不存在的瑕疵。現在,當我回到問題中的原始代碼時,它仍然超時,所以現在我非常困惑。也許這只是一個巧合,現在由於某種不相關的原因而超時了。 –