2012-10-15 162 views
2

這是我的工作結構:Rails模型attr_accessor屬性沒有保存?

應用程序/模型/ model.rb

class Model < ActiveRecord::Base 
    attr_accessor :some_var 
end 

應用程序/模型/ model_controller.rb

class ModelsController < ApplicationController 
    def show 
     @model = Model.find(params[:id]) 
     @other_var 
     if @model.some_var.nil? 
      @model.some_var = "some value" 
      @other_var = "some value" 
     else 
      @other_var = @model.some_var 
     end 
    end 
end 

每當我運行此代碼(例如show方法),if子句被評估爲true(例如@ model.some_var == nil)。我如何解決這個問題?我假設attr_accessor的工作原理有什麼問題嗎?

回答

10

attr_accessor是一個內置的Ruby宏,它將爲對象的實例變量定義setter和getter,並且與具有ActiveRecord實例的數據庫列無關。例如:

class Animal 
    attr_accessor :legs 
end 

a = Animal.new 
a.legs = 4 
a.legs #=> 4 

如果您希望將其保存到數據庫中,則需要在遷移中定義一列。然後,ActiveRecord將自動創建訪問器方法,並且您可以(應該)刪除您的聲明。

+0

啊,好的。事實證明,我真的不知道如何保存這個特定的屬性,因爲我需要some_var作爲一個散列,並且我知道我不能簡單地將一個列定義爲散列,所以現在我要使用序列化完成工作。 – tanookiben

+0

(雖然它已經很長時間以來,你發佈了這個問題)如果你使用postgres你可以使用jsonb類型列來存儲哈希.. – Aitizazk