avatar

大兜

右手寫程式,左手寫音樂

標籤:Ruby

留言

My Rails Template

Why

We engineers always hate repeating doing the same thing.

Take me for instance, everytime I create a new rails project, I edit GemFile to install lots of useful gems such as devise, carrierwave, etc, and then download Twitter Bootstrap with newest version, extract it into vendor/assets/images, vendor/assets/javascripts and vendor/assets/stylesheets, finally, replace ../img/xxx.png into xxx.png in bootstrap.css and bootstrap.min.css.

What

My template does two things:

  1. Automatically install the following gems:

    • devise
    • cancan
    • carrierwave
    • simple_form
    • dynamic_form
    • will_paginate
    • rdiscount
    • rails-i18n
  2. Download Twitter Boostrap with the newest version, and correspondingly extract files into vendor/assets/

Usage

rails new myapp -m=https://raw.github.com/gist/4010690

Alternatively, if you encounter some SSL problem during the previous command, please download the file directly and run:

rails new myapp -m=filename
繼續閱讀

留言

N-Gram 斷詞法實做

今天心血來潮在 RubyGems 搜尋了一下看有沒有可用的 N-Grams library,確實也給我找到幾個,但可惜的是他們只有針對英文做斷詞,沒有針對中日韓。我們可想像的到英文的斷詞和中文的斷詞是截然不同的,但現在許多文章卻又中英日混雜,面對這種文章,那些 library 起不了什麼作用。

於是用下午的時間我就自己寫了一個來解決這類的問題:

繼續閱讀

留言

params["key"] 和 params[:key]

今天在寫學長託付的 API Server 時,突然對 controller 中用到的 params 變數感到好奇,我想知道為什麼 params[:id]params["id"] 都可以 access 同一份資料,於是展開了 trace code 奇幻之旅。

我臨時寫了一個程式,先 trace...

繼續閱讀

留言

將現有資料庫導入 Rails ActiveModel

官方說明文件上沒有這方面的說明,網路上爬到的解大多過時,或者根本不正確,於是作此文分享我目前的方法。

當使用 rails 指令產生新的 Model 時,這樣的寫法很常見:

繼續閱讀

留言

Ruby Block, Proc and Lambda

Ruby 可將程式碼當參數傳遞,被參數化的程式碼稱為 Block。也就是呼叫方法時後面的 {|| } 符號,其中的 || 之間放置參數列宣告,若無參數則可省略。

Ruby 的 Proc 類似 ECMAScript 的 function。在 ECMAScript 中使用關鍵字 function 即可配置一個 Function 物件。Ruby 則使用 Kernel::proc、Kernel::lambda 方法(但兩者有些微差異),或是直接建構一個 Proc 物件(Proc.new)。

Block and Proc

Ruby 會主動將 Block 參數化成 Proc,Block 無法單獨存在,只能作為 Ruby 指令或呼叫方法時的引數。僅需利用流程指令 yield 即可將流程轉移到被參數化的 Block 中運行。我們可以用 Kernel::block_given? 判斷使用者有無傳遞 Block。

繼續閱讀