如何在会话中存储零用户的目标?
Posted
技术标签:
【中文标题】如何在会话中存储零用户的目标?【英文标题】:How to store nil user's goal in a session? 【发布时间】:2015-11-01 14:52:12 【问题描述】:如何在用户的会话中保存用户的目标?然后,一旦他注册,保存该目标并将其从会话中删除?
在主页上是这样的:
goals/_form.html.erb
<%= simple_form_for(@goal) do |f| %>
<%= f.text_field :name %>
<%= f.text_field :deadline %>
<%= f.submit %>
<% end %>
点击提交后,nil
用户的目标应该被添加到他的会话中,然后他应该被重定向到注册页面,注册后他的目标应该被添加到他新创建的帐户中。
goals_controller
def create
@goal = params[:user] ? current_user.goals.build(goal_params) : Goal.new(goal_params)
if params[:session][:name][:deadline]
session[:name][:deadline] = params[:session][:name][:deadline]
redirect_to signup_url
elsif
@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
现在,如果我以nil
用户身份点击提交,我会得到:
NoMethodError in GoalsController#create
undefined method `[]' for nil:NilClass
for line: if params[:session][:name][:deadline]
然后,一旦他注册了存储在他的会话中的目标,就应该将其添加到他的帐户中。如果最后一个条件太复杂,我可以单独提出一个问题。
【问题讨论】:
你用什么来登录?设计? 创建操作的 nil 错误在哪一行?还有那个 elsif 之后的条件是什么? simple_form_for 的参数结构不会是 params[:goal][:name] 和 params[:goal][:deadline] 吗?*** :session 来自哪里?还是您想查看该会话值是否存在? 【参考方案1】:目标控制者
def create
unless params[:user].present?
# 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
用户控制器
def create
# create user logic
if @user.save
# Grab the session variable at the same time deleting it
gName = session.delete(:goal_name)
gDeadline = session.delete(:goal_deadline)
# You can make this more complex for error handling
@user.goals.create(name: gName, deadline: gDeadline)
redirect_to success_creation_path
else
...
end
end
【讨论】:
Yw。而不是构建它然后保存它,您可以创建它。我将更改变量名称,以免混淆 再次感谢。非常好:] 嘿@blnc,我在注册过程中添加了一个额外的步骤,要求用户也建立一个习惯,但如果你也愿意帮助我,我遇到了一个问题:] ***.com/questions/31908491/…以上是关于如何在会话中存储零用户的目标?的主要内容,如果未能解决你的问题,请参考以下文章