2012-12-17 93 views
0

我想添加一個新的變量(方法)到我的數據庫查詢在rails中。我不想在數據庫中添加一個新字段,我想要使用現有的字段並使用它來創建新的方法。但是,它不會拋出任何錯誤或任何錯誤,它只是不可用。有任何想法嗎?Rails:將變量添加到模型(或控制器)實例

class Task < ActiveRecord::Base 

    attr_accessible :old_field, :new_field 

    def after_initialize 
    self.new_field = :old_field * 2 
    end 
end 

部分地,我不確定這個邏輯是否在模型或控制器中進行。

+0

您想要添加屬性(列)? –

+0

不,這不是一個新列,只是一個我想基於邏輯和單獨數據庫列創建的新方法。 – jake

+0

更新了我的回答 –

回答

4
class Task < ActiveRecord::Base 

    attr_accessible :old_field 

    def new_field() 
    self.old_field * 2 
    end 
end 

或U可以這樣來做,這需要你加入使用像Anatoliy這樣的遷移工具,您的數據表中的字段確實低於

class Task < ActiveRecord::Base 

    attr_accessible :old_field, :new_field 
    before_save :calc_new_field 

    private 
    def calc_new_field 
     self.new_field = self.old_old_field * 2 
    end 
end 
+0

我可以調用它,並且它顯示出來,但它不會顯示在我的調試@任務或我的骨幹.to_json中。這是爲什麼? – jake

+0

我不確定調試對Ruby來說還是比較新鮮的。而且我從來沒有使用back_bone.js –

+0

基本上,如果我只是展示它,它就不會顯示在整體變量中 - 只有在我調用它時才顯示出來。當我將整個變量傳遞給參數時,我希望它顯示出來,例如'tasks:#{raw @ tasks.to_json}'。調試是(在我的天真的心態)PHP的'print_r'爲Ruby。有什麼想法嗎? – jake

0

要添加你應該使用attr_accessor沒有attr_accesible

在終端試試這個虛擬屬性增加新的屬性:

rails g migration AddNewFieldToTasks new_field:integer 
rails db:migrate 
+0

對不起,應該更具體一些:我不想添加一個新列,只是想從邏輯中添加一個新方法。 – jake

+0

更新了我的答案 –

+0

在您的問題更新後我的答案沒有意義=) –

相關問題