【问题标题】:Trying to increment model attribute - Undefined method on model attribute试图增加模型属性 - 模型属性上的未定义方法
【发布时间】:2014-12-11 00:40:18
【问题描述】:

我试图在单击链接时增加模型中列的值,但我不断收到属性未定义的方法错误,我不知道我做错了什么

型号

class VisitorsController < ApplicationController

  def inc_adviser

    self.adviser = self.adviser + 1
    self.save
    redirect_to root_path

  end
end

路线

match '/adviser' => 'visitors#inc_adviser'

查看

<%= link_to 'Adviser', '/adviser', method: :post  %>

谁能指出问题出在哪里?

谢谢

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 activerecord


    【解决方案1】:

    self 在该上下文中是控制器实例,而不是您似乎期望的模型实例。您需要从某处获取模型实例并在其上增加计数器:

    def inc_adviser
      # Something like this, don't have enough information to be more specific.
      model = WhateverModel.find(params[:id])
      model.adviser = model.adviser + 1
      model.save
      redirect_to root_path
    end
    

    当然,这取决于竞争条件,因此您应该改用increment_counter

    def inc_adviser
      WhateverModel.increment_counter(:adviser, params[:id])
      redirect_to root_path
    end
    

    【讨论】:

    • 是的,我刚刚意识到这个问题是多么愚蠢,并做了类似于你的第一个建议的事情。我认为这对我来说最有效,因为我要做的就是让一个人在一个框内打勾,然后该列变为真。谢谢
    • 如果您希望该列变为真,那么您应该说model.adviser = true 并将您的adviser 列定义为布尔类型。有些数据库有本地布尔值,有些使用 C 风格的零和一,最好准确地说出你的意思以避免混淆。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2021-07-14
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-20
    相关资源
    最近更新 更多