程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Rails開發細節(一)

Rails開發細節(一)

編輯:關於JAVA

常用命令

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved