【问题标题】:How to skip a session create?如何跳过会话创建?
【发布时间】:2015-11-06 20:51:50
【问题描述】:

nil 用户点击“注册”时,鼓励他在登录前提交目标、习惯和价值观。

但他可以通过点击跳过其中一种形式:

问题是,如果他现在跳过一个表格,就会弹出一条错误消息:

TypeError in UsersController#create
no implicit conversion of nil into String

在这个例子中,我跳过了习惯形式,所以它在@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 语句,但我很难设置正确的方法来触发条件。

【问题讨论】:

  • 错误发生在哪一行?
  • @blnc 它发生在我跳过的任何形式上,所以在这个例子中我跳过了习惯形式,所以它在 @user.habits.create(
  • 它应该告诉你错误发生在哪一行。可能是尝试将“Nil”值分配给期望“String”值的对象的结果。

标签: ruby-on-rails ruby session


【解决方案1】:

我假设如果他们提交表单,所有值都会被填充。也就是说:

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

【讨论】:

  • 一直超时。我会继续使用它Net::ReadTimeout (Net::ReadTimeout): app/models/user.rb:125:in 'send_activation_email' app/controllers/users_controller.rb:58:in 'create'
  • 这与您的邮件配置有关。它试图联系服务器但没有得到响应。注释掉@user.send_activation_email 看看它是否有效
  • 当我注释掉激活电子邮件时,它重定向回root_url,所以我猜它的一部分有效,但这会产生另一个以前不存在的问题。现在,当我回到问题中的原始代码时,它仍然超时,所以现在我真的很困惑。也许只是巧合,现在由于一些不相关的原因而超时。
  • 超时似乎与此操作无关。很难在不查看服务器日志的情况下判断它在做什么,请检查它们以查看它挂在哪里
  • 是的,这可能与我的互联网速度慢有关。希望我能自己解决这个问题。非常感谢您的帮助 blnc :]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-16
  • 1970-01-01
  • 2011-04-26
  • 2018-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多