2014-12-11 76 views
0

我想增加我的模型中的列的值,当一个链接被点击时,我不断收到一个未定义的方法错误的属性,我不知道什么我做错了尝试增加模型属性 - 未定义的模型属性的方法

模式

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 %> 

任何人都可以提出的问题是什么?

感谢

回答

0

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 
+0

是啊,我刚刚意识到这个问题有多愚蠢,并且做了类似于你的第一个建议。我认为这对我来说最合适,因为我所要做的就是让一个人勾选一个框,然后该列变为真。谢谢 – Robbo 2014-12-11 01:30:36

+0

如果你希望列成为true,那么你应该说'model.adviser = true'并且将你的'adviser'列定义为一个布尔类型。有些数据库有本地布尔值,有些使用C型的零和一,最好说出你的意思,以避免混淆。 – 2014-12-11 01:51:41

+0

同意并再次感谢,已经完成! – Robbo 2014-12-11 01:57:07