【问题标题】:Rails 4 - can't find entity in join tableRails 4 - 在连接表中找不到实体
【发布时间】:2014-07-05 15:32:42
【问题描述】:

我有模型对象TeamPostUser 以及TeamUser 之间的连接表Member。团队中的用户可以对帖子进行投票。在对帖子进行投票时,我想给创建 Post 点的用户。因此,我有一个“积分整数attribute in myMember”模型。我有一种方法可以给用户打分,如下所示:

def give_points_to_user(post, increase)

  member = post.user.members.where(team_id: post.team.id).first

  if increase
    member.points += 5
  else
    member.points -= 5
  end

  member.save!

end

调用这个方法给了我这个错误:

undefined method `+' for nil:NilClass

那么,如果我想找到正确的成员,我的 find(或 where)调用应该如何查看?也就是说,创建帖子的成员/用户。

【问题讨论】:

  • 表中是否已经有value 对应的points?如果不是member.points += 5 将不起作用,因为当您提供member.points += 5 时,它实际上是member.points = member.points+5,所以member.points 将为nil,错误也是如此。
  • @Pavan 看来你是对的。我虽然整数的默认值是 0。不使用 += 或 -= 使它工作(至少没有错误)。
  • 你需要让你的字段默认为 0
  • 刚刚尝试做一个正常的分配来测试它,member.points = 5。将添加更多逻辑以使其按我想要的方式运行。
  • 嗯,很好。同时我会写我的评论作为答案。

标签: sql ruby-on-rails ruby activerecord ruby-on-rails-4


【解决方案1】:

nil:NilClass 的未定义方法 `+'

问题是points的值最初设置为空,所以member.points += 5不起作用,因为当你给member.points += 5它实际上是member.points = member.points+5。所以你实际上给member.points = nil+5,它失败了给出那个错误。

解决方案

正如@Mandeep 所说,您可以通过在表中将默认值设置为points 属性来使其工作。假设如果值为zero(0),那么member.points += 5 的结果将为5。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-26
    • 1970-01-01
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多