2014-12-11 83 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