【发布时间】: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 来自哪里?还是您想查看该会话值是否存在?
标签: ruby-on-rails ruby session model-view-controller