2015-06-08 59 views
1

沒有宣佈我剛創建使用以下命令Rails的模型實例變量的模型類

rails generate model temp name:string description:string 

我打開temp.rb一個模型,但它不包含成員的任何聲明。

我也困惑實例變量的方式在紅寶石中使用。我看到很多代碼片斷,它只是在方法中使用@instance_var的實例變量。是不是在ruby中需要實例變量聲明?這種方式如果我有15個方法,並且每個都設置了新的實例變量,那麼沒有一個位置可以找到所有的實例變量,就像我們在java中聲明的那樣在與範圍(私有,保護,公衆等)類的開頭通常是變量下面是和示例代碼

class Hello 

    def initialize 
    @instanceHello = "welcomeBack" 
    end 

    def printHello 

    print @instanceHello 
    end 
end 
+0

沒有,在Ruby中不需要實例變量的聲明。實例變量在第一次使用時彈出,無論使用哪個*。這既好又壞。 –

回答

1

對於一個模型,它不是class Hello;它應該是class Hello < ActiveRecord::Base。所以它繼承了很多功能。

成員沒有在模型中定義,而是在遷移中定義成員,就像您做過rails generate model temp name:string description:string一樣。如果您有一個名爲temp的模型,那麼數據庫中應該有一個名爲temps的表,並且該表應實際上包含所有這些成員。

你問過關於Ruby中實例變量的第二件事。是的,確實沒有一個地方可以存儲實例變量。相反,他們分散在不同的方法,他們屬於;我認爲它增加了可讀性。

至於你的例子來說,你可以這樣做:

class Hello 
    attr_accessor :instanceHello 
    def initialize 
    @instanceHello = "welcomeBack" 
    # self.instanceHello also works here 
    end 

    def printHello 
    p @instanceHello # print doesn't work in Ruby. p or puts does the job. 
    # self.instanceHello also works here 
    end 
end 
+0

我在類中添加了Hello類的代碼來顯示實例變量聲明,它與模型無關。謝謝 – bitkot

+0

我編輯了我的答案。請檢查一下。 –

+0

'print'起作用,與'puts'不同。 –