【问题标题】:Add to Integer Variable from Rails Controller从 Rails 控制器添加到整数变量
【发布时间】:2016-12-20 15:35:16
【问题描述】:

这应该是一个相当容易修复的错误(我希望如此)。当我的应用程序上的 joke 获得批准时,我希望 user 被授予 5 manpoints(不要问)。我目前在我的“jokes_controller”中有这个:

  def approve
    @joke = Joke.find(params[:id])
    @joke.update_attributes(approved: true)
    if @joke.user.manpoints = nil
      @joke.user.manpoints = 5
    else
      @joke.user.manpoints += 5
    end
    @joke.save
    redirect_to jokes_path
  end

我在尝试批准一个笑话时收到此错误:

undefined method `+' for nil:NilClass

我认为 += 是执行此操作的“Ruby 方式”?谁能直截了当?

【问题讨论】:

  • 尝试将@joke.user.manpoints = nil 更改为@joke.user.manpoints.nil?@joke.user.manpoints == nil 应该是正确的语法

标签: ruby-on-rails


【解决方案1】:

if 条件中的= 更改为==。我假设您需要将manpointsnil 进行比较,而不是将nil 分配给人员点。 应该是这样的:

if @joke.user.manpoints == nil
  ...

您可以在此处省略== 运算符:

unless @joke.user.manpoints
  ...

PS。为什么除了manpoints 将是nil 之外?

【讨论】:

  • 这些更改消除了错误,但在批准操作后usermanpoints 仍然是nil
  • 您需要保存user 实例。使用@joke.user.save 保存它。
  • 完美!谢谢!
  • 不客气 :) 顺便说一句,您可以避免比较。使用迁移的默认值。 related info
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-13
  • 1970-01-01
  • 2020-10-28
相关资源
最近更新 更多