?

常用命令

?

 
  1. rails?new?new_app?
  2. ?
  3. cd?new_app
  4. ?
  5. rake db:create
  6. ?
  7. rails?server?
  8. ?
  9. rails?generate?controller?Blog?action1?action2
  10. ?
  11. rails generate scaffold Product title:string description:text


  1. ?rails generate model Comment commenter:string body:text post:references

?

  1. rake db:migrate
  2. ?
  3. rake db:rollback
  4. ?
  5. rails test:units
  6. ?
  7. rails?console?

約定

rails中有很多的約定,正是這些約定幫我們節省了時間,讓我們很清晰的明白項目的結構,文件的位置。

表名約定

表名默認使用model的復數形式,小寫。例如:model是Sheep,默認的表名就是sheeps,如果我們想自定義一些其他名字,或者基于一個已經存在的數據表進行開發,不能修改這個數據表的名稱,那么我們可以通過下面的代碼來指定表的名稱。

?

 
  1. class?Sheep?<?ActiveRecord::Base?
  2. ?
  3. ??self.table_name?=?"sheep"?
  4. ?
  5. end?

表主鍵的約定

默認主鍵名稱id,整型,自增。在數據表中名稱就是id,在model中也通過.id來訪問。如果想指定其他名稱,可以通過下面的代碼實現。

?

 
  1. class?LegacyBook?<?ActiveRecord::Base?
  2. ?
  3. ??self.primary_ke?=?"isbn"?
  4. ?
  5. end?

通過上面的修改之后,數據表的主鍵列名稱變為isbn,在model中也通過.isbn來訪問。但是有一個地方例外,就是給主鍵賦值,還是需要使用id來賦值。

?

 
  1. book?=?LegacyBoo.new?
  2. book.id?=?"1-214-985"?
  3. book.title?=?"programming?in?ruby"?

除了給主鍵賦值需要用id,其他時候都用指定的列名。

model的關系

表關系有三種:

one-to-one

one-to-many

many-to-many

在model中使用的聲明有:has_one, has_many, belongs_to, has_and_belongs_to_many。

one-to-one

?

 
  1. class?Order?<?ActiveRecord::Base?
  2. ??has_one?:invoice?
  3. end?
  4. ?
  5. class?Invoice?<?ActiveRecord::Base?
  6. ??belongs_to?:order?
  7. end?

一個訂單有一個發票抬頭,一對一的關系。

有一條很重要:包含外鍵的表,一定會有一個belongs_to的聲明。

one-to-many

?

 
  1. class?Order?<?ActiveRecord::Base?
  2. ??has_many?:line_items?
  3. end?
  4. ?
  5. class?LineItem?<?ActiveRecord::Base?
  6. ??belongs_to?:order?
  7. end?

一個訂單會有很多的item,一對多的關系。

many-to-many

?

 
  1. class?Product?<?ActiveRecord::Base?
  2. ??has_and_belongs_to_many?:categories?
  3. end?
  4. ?
  5. class?Category?<?ActiveRecord::Base?
  6. ??has_and_belongs_to_many?:products?
  7. end?

一個產品屬于多個目錄,一個目錄包含多個產品,多對多的關系。除了products表和categories表,會有一個中間表categories_products(category_id, product_id)來存放這個關系。

我們也可以自己定義關系表,還可以存放一些其他信息,一些關于關系的信息。其實就是把多對多的關系拆分開,成為兩個一對多的關系,這樣也好理解些。

?