【发布时间】:2015-11-01 17:08:32
【问题描述】:
使用help of @blnc,我们能够将用户的目标存储在他的会话中。然后在他注册后,将该目标保存到他的新帐户并从会话中删除。
作为注册过程中的一个附加步骤,我希望用户在能够注册之前也养成一种习惯。
goals_controller
def create
if current_user == nil
# If there is no user, store the goal values to the session
session[:goal_name] = goal_params[:name]
session[:goal_deadline] = goal_params[:deadline]
redirect_to signup_url
else
@goal = current_user.goals.build(goal_params)
if @goal.save
track_activity @goal
redirect_to @goal, notice: 'Goal was successfully created'
else
flash.now[:danger] = 'Required Field: "Enter Goal"'
render 'new'
end
end
我模仿了存储目标的操作,但它不起作用。当用户创建他的目标,然后是习惯,然后注册时,在看到他的新帐户时,只存储了目标。这种习惯从未被保存下来。当我在控制台中搜索它时,它甚至都不存在。
我做错了什么?
habits_controller
def create
if current_user == nil
# If there is no user, store the goal values to the session.
session[:habit_committed] = habit_params[:committed => []]
session[:habit_date_started] = habit_params[:date_started]
session[:habit_trigger] = habit_params[:trigger]
session[:habit_action] = habit_params[:action]
session[:habit_target] = habit_params[:target]
session[:habit_reward] = habit_params[:reward]
session[:habit_order] = habit_params[:order]
redirect_to signup_url
else
@habit = current_user.habits.build(habit_params)
if @habit.conceal == true
@habit.save_with_current_level
redirect_to @habit, notice: 'Habit was successfully created'
elsif
@habit.save_with_current_level
track_activity @habit
redirect_to @habit, notice: 'Habit was successfully created'
else
flash.now[:danger] = 'Required Fields: "Committed to", "Started", and "Enter Habit"'
render 'new'
end
end
end
def new
if current_user == nil
@habit = Habit.new
else
@habit = current_user.habits.build
end
end
users_controller
def create
@user = User.new(user_params)
if @user.save
# Grab the session variable at the same time deleting it
name = session.delete(:goal_name)
deadline = session.delete(:goal_deadline)
committed = session.delete(:habit_committed)
date_started = session.delete(:habit_date_started)
trigger = session.delete(:habit_trigger)
action = session.delete(:habit_action)
target = session.delete(:habit_target)
reward = session.delete(:habit_reward)
#You can make this more complex for error handling
@user.goals.create(name: name, deadline: deadline)
@user.habits.create(committed: committed, date_started: date_started, trigger: trigger, action: action, target: target, reward: reward)
@user.send_activation_email
flash[:info] = "Please check your email to activate your account."
redirect_to root_url
else
render 'new'
end
end
在我发布一个习惯后从终端:
Started POST "/habits" for 127.0.0.1 at 2015-08-09 16:56:20 -0400
Processing by HabitsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"IWbim9fUlU0Ix43Z+WGpJkKhbhPyM7o0JeZ1KFY1X5ugGukOs6asvRatior0c7vBfmaRiNmKkl9O1bka5Bdrcg==", "habit"=>{"committed"=>["sun", "mon", "tue", "wed", "thu", "fri", "sat", ""], "date_started(2i)"=>"8", "date_started(3i)"=>"9", "date_started(1i)"=>"2015", "trigger"=>"", "action"=>"test", "target"=>"", "reward"=>"", "tag_list"=>"", "conceal"=>"0"}, "button"=>""}
Redirected to http://0.0.0.0:3000/signup
Completed 302 Found in 11ms (ActiveRecord: 0.0ms)
Started GET "/signup" for 127.0.0.1 at 2015-08-09 16:56:21 -0400
Processing by UsersController#new as HTML
Rendered shared/_error_messages.html.erb (0.1ms)
Rendered users/new.html.erb within layouts/application (3.8ms)
Rendered layouts/_header.html.erb (0.4ms)
Completed 200 OK in 1047ms (Views: 1046.2ms | ActiveRecord: 0.0ms)
【问题讨论】:
-
嗯我不喜欢这段代码,因为你没有检查习惯和目标是否保存成功。而且因为你重定向,你永远不会知道发生了什么。
标签: ruby-on-rails ruby session model-view-controller