常用命令
rails new new_app cd new_app rake db:create rails server rails generate controller Blog action1 action2 rails generate scaffold Product title:string description:text
rails generate model Comment commenter:string body:text post:references
rake db:migrate rake db:rollback rails test:units rails console
約定
rails中有很多的約定,正是這些約定幫我們節省了時間,讓我們很清晰的明白項目的結構,文件的位置。
表名約定
表名默認使用model的復數形式,小寫。例如:model是Sheep,默認的表名就是sheeps,如果我們想自定義一些其他名字,或者基於一個已經存在的數據表進行開發,不能修改這個數據表的名稱,那麼我們可以通過下面的代碼來指定表的名稱。
class Sheep < ActiveRecord::Base self.table_name = "sheep" end
表主鍵的約定
默認主鍵名稱id,整型,自增。在數據表中名稱就是id,在model中也通過.id來訪問。如果想指定其他名稱,可以通過下面的代碼實現。
class LegacyBook < ActiveRecord::Base self.primary_ke = "isbn" end
通過上面的修改之後,數據表的主鍵列名稱變為isbn,在model中也通過.isbn來訪問。但是有一個地方例外,就是給主鍵賦值,還是需要使用id來賦值。
book = LegacyBoo.new book.id = "1-214-985" 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
class Order < ActiveRecord::Base has_one :invoice end class Invoice < ActiveRecord::Base belongs_to :order end
一個訂單有一個發票抬頭,一對一的關系。
有一條很重要:包含外鍵的表,一定會有一個belongs_to的聲明。
one-to-many
class Order < ActiveRecord::Base has_many :line_items end class LineItem < ActiveRecord::Base belongs_to :order end
一個訂單會有很多的item,一對多的關系。
many-to-many
class Product < ActiveRecord::Base has_and_belongs_to_many :categories end class Category < ActiveRecord::Base has_and_belongs_to_many :products end
一個產品屬於多個目錄,一個目錄包含多個產品,多對多的關系。除了products表和categories表,會有一個中間表categories_products(category_id, product_id)來存放這個關系。
我們也可以自己定義關系表,還可以存放一些其他信息,一些關於關系的信息。其實就是把多對多的關系拆分開,成為兩個一對多的關系,這樣也好理解些。
出處http://virusswb.blog.51cto.com/115214/1016250