2014-01-25 23 views
1

我是在軌道上的紅寶石新。我創建了一個名爲member的類,其中包含一些變量,例如name,ext ext。當我在應用程序/模型打開member.rb,該類似乎空:我的Ruby類原來是空的,爲什麼不能創建屬性?

class Member < ActiveRecord::Base 
end 

我意識到,當我運行member.all。它提供了錯誤:

NameError : undefined local variable or method 'member' for main:Object 

感謝所有幫助

+0

[爲什麼rails會生成空模型?](http://stackoverflow.com/questions/19323870 /爲什麼 - 軌道 - 是 - 生成空模型) – jcm

+3

您是否使用'rails generate ...'生成模型?您可能是指您的列名,它們位於您的遷移文件中。什麼版本的Rails? 'member.all'也是錯的,它會是'Member.all'。 – Beartech

回答

3

好吧,第一。如果你使用rails generate ...來製作,那麼你的班級有屬性。對於我來自C++並且具有上面所述的所有屬性,這很奇怪。這在Ruby中是不同的。但是,如果你像普通的C++程序員那樣想它,它就不會有任何變量就像創建Model.rb文件一樣,它在你嘗試的意義上是行不通的讓它工作。

其次,當你試圖搜索你的類的對象。你必須做Member.all。資本化對此非常重要。

當您搜索時,您可以使用您要查找的對象的ID做Member.find(:id)

最後,開始改變類對象的屬性,你就必須開始在你的類使用此:attr_accessor :first_name, :last_name

希望這是有幫助的。

2

該課程似乎是空的,但事實並非如此。 Rails檢查你的數據庫模式以找到該表中定義的列。然後它動態創建這些列的訪問器。這一切都是通過主動錄製完成的。所有你需要做的是從表名中派生出一個類名(例如,一個名爲「members」的表和一個名爲「Member」的類,並且該類從ActiveRecord :: Base派生。

Ruby因爲類的定義是可以在運行時修改的,任何類或者對象都可能會添加或者刪除方法,Rails會大量使用這種「元編程」功能

你未定義的變量錯誤是因爲「member 「(小寫)指的是一個變量,要引用該類,請務必將其大寫:」Member「。

相關問題