如何跳过会话创建? [英] How to skip a session create?

查看:42
本文介绍了如何跳过会话创建?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆