2015-12-21 100 views
0

我已經在我的Rails class_controller以下兩種方法的不一致的行爲的應用程序:軌道4:基於4的ActiveRecord :: StatementInvalid與update_all()

結帳(), 簽入()

這兩種方法對數據庫的操作是相反的:checkout()將字符串值插入到checkout字段/列中,而checkin()將字符串值從checkout字段/列中移除。

的代碼在這兩種方法都是非常相似:

def checkout 
    @class = Class.where("id = ?", params[:class_id]) 
    @class.update_all(":checkout" => "done blah blah") 
end 

def checkin 
    @class = Class.where("id = ?", params[:class_id]) 
    @class.update_all(":checkout" => "") # set it empty or nil?? 
end 

呼叫結帳()由URL映射完美的作品,但是,當所述檢入()方法引發以下錯誤。看起來像update_all方法的行爲不一致:

PG :: UndefinedColumn:錯誤:柱:關係 「類」 的 「結帳」 不存在LINE 1:UPDATE 「類」 SET 「:結帳」= '' WHERE( ID = '1')^:UPDATE 「類」 SET 「:結帳」= '' WHERE(ID = '1')

回答

1

我很驚訝你說第一個版本的作品。如果沒有名爲:checkout的列,它也應該失敗。

我建議「修理」兩個版本的比較常見的Ruby成語:

def checkout 
    @class = Class.where(id: params[:class_id]) 
    @class.update_all(checkout: 'done blah blah') 
end 

def checkin 
    @class = Class.where(id: params[:class_id]) 
    @class.update_all(checkout: '') # set it empty or nil? 
end 
1

選其一"checkout":checkoutupdate_all

@class.update_all(:checkout => "done blah blah") 

Symbols在Ruby中不需要引用。