如何跳过会话创建? [英] How to skip a session create?
问题描述
当 nil
用户点击注册"时,鼓励他在登录前提交目标、习惯和价值.
When a nil
user clicks "sign up" he is encouraged to submit a goal, habit, and value before being logged in.
但他可以通过点击跳过其中一种表格:
But he may skip one of those forms by clicking:
问题是,如果他现在跳过一个表单,则会弹出一条错误消息:
The problem is if he skips a form right now then an error message pops up:
TypeError in UsersController#create
no implicit conversion of nil into String
在这个例子中,我跳过了习惯形式,所以它在 @user.habits.create(
In this example I skipped the habit form so it is being raised on @user.habits.create(
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
语句,但我很难设置正确的方法来触发条件.
How can we allow the user to skip? I've been trying to include various if/else
statements, but I'm having a hard time setting the right method to trigger the conditional.
推荐答案
我假设如果他们提交表单,所有值都会被填充.那就是:
I am going to assume that if they submit the form all the values get populated. That said:
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
这篇关于如何跳过会话创建?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!