2015年3月9日 星期一

rails_0309

新學期的第一次課程,關於rails的一些基礎,上完課後的想法。
五步驟:新專案 -> 鷹架 -> 轉資料表 -> 伺服器 -> 網頁開啟




01.開新專案
    $ rails new bookstore
    切到新開的專案下
    $ cd bookstore/

02.產生鷹架
    $ rails generate scaffold book title:string content:text price:integer page:integer publish_date:date is_online:boolean

    generate:可簡寫成g
    book:為表單名稱
    title, content, price, page, ...:為欄位名稱
    :後面表示欄位類型,如:string, text, integer, ...。沒寫就是預設的string

    建立完成時,/db/migrate/20150309063722_create_books.rb會出現,顯示資料的欄位與名稱。

03.依描述轉成資料表
    $ rake db:migrate

    建立完成時,/db/schema.rb會出現,顯示資表結構(入資料庫了)

04.伺服器執行
    $ rails server

    因環境裝不起來,換成線上平台c9.io
    c9.io伺服器執行
    新開一個terminal
    切到專案下
    $ cd bookstore/
    伺服器執行
    $ rails server -p $PORT -b $IP

05.開啟網頁
    開瀏覽器:http://localhost:3000/
    加上books就可以了
    http://localhost:3000/books

    在c9.io中
    Preview->Preview with Web Server
    https://5xruby-s940101.c9.io/
    加上books就可以了
    https://5xruby-s940101.c9.io/books



gemfile檔(算是設定檔吧)
>=1.3.0:表示找大於或等於1.3.0的版本
~>2.1.0:表示抓最近的小版本(最後的數字.0)


若覺得載入太慢,按下ctrl+c停止後,可用此指令繼續;或是在安裝時,需要其他先行檔時,也可以用此指令。(幫你找或補齊需要的套件版本)
$ bundle install


rails的特色:
  CoC:慣例優於設定。
  DRY:不要重複你自己。
  CURD:快速的新增、修改、刪除。
  MVC:設計慣例。m模型(資料)、v畫面、c控制器。
    mvc檔案所在的位置:
    controller(控制器):/app/controllers/books_controller.rb
    view(畫面):/app/views/books/index.html.erb
    model(模組):/app/models/book.rb
    router:/config/routes.rb


看詳細功能
$ rake routes
  分成下列四種
   - post(新增)
   - get(讀取)
   - put & patch(更新)
   - delete(刪除)



再建立兩張表單(重複上面的02~03步驟)
user name:string, email:string
post title:string, content:text, user_id:integer

資料相連接,在
/app/models/post.rb 加上belongs_to:user
/app/models/user.rb 加上has_many:posts


開啟類似ruby的irb
$ rails console
console:可簡寫成成c
重新整理:reload!
離開:ctrl+D


下面都是在rails c下的動作
 - 列出所有使用者
   =>User.all

 - 列出id為1的使用者
   =>User.find_by(id:1)

 - 計算有多少使用者
   =>User.count


欲改變某欄位的資料
 - 找到那筆資料,並指定給p1
   =>p1=User.find_by(id=1)

 - 改變使用者名稱
   =>p1.name="cat"
   (記得要加上"",因為是文字)

 - 存檔
   =>p1.save
   (不存就還是原先的,所以一定要存)


兩串接的資料,
 - 想知道這篇文章的使用者名稱
   =>Post.find_by(id:1).user.name

 - 想知道這位使用者有哪些文章
   =>User.find_by(id:1).blogs


驗證資料完整性
/models/posts.rb
validates:title, presence:ture
/models/user.rb
validates:name, length:{minimum:5}

  validates:需要驗證的欄位
  presence:是否可以空白
  length:{minimum:5}:長度限制,最少不能少於五個字。

沒有留言:

張貼留言