ruby on rails

Rails利用Module整理Model

在Rails當中有許多refactor model的邏輯和方法,本篇要說明要如何利用module整理model。 1. 情境:每個model都需要使用同一個method 例如今天人力資源部門的資料庫,有engineer、salesperson共兩個table,我們要計算每一個部門的平均薪資,因此先撰寫以下的method: class Engineer < ActiveRecord::Base def self.average_pay result = 0 all.map {|person| result = result + person[:pay] } result / all.length end end 用這樣的方法,就可以利用Engineer.average_pay算出整個部門的平均薪資。其他部門也照本宣科。 2. 撰寫module,簡化重複的方法 雖然這樣看起來很ok,但假如整個人力資源的資料庫有20個model都要這樣算呢?這樣完全不符合Rails的DRY原則,要是計算方式有改動,就要改

ruby on rails

Debugging Rails 遇到Bug別慌!先看懂錯誤訊息!

在新手學習Ruby & Rails時,可能完全不知道error或exception要如何處理,一跳出錯誤訊息就傻掉了,但大多的情況都可以從錯誤訊息中判斷出問題所在,省下Google或發問的時間。 在這邊簡單說明如何閱讀錯誤訊息: 1. 看懂Ruby irb當中的錯誤訊息 學習Ruby最開始都是在console的IRB(Interactive Ruby)當中(除非你跳過這個階段)。在IRB當中,錯誤訊息顯示方式非常直接、原始。以下是一個很典型的錯誤: 簡單將這個訊息分為幾個部分: (1) 標題:NoMethodError Ruby中有非常多error及exception的類型,分別代表不同的錯誤。例如NoMethodError代表使用者試圖呼叫一個不存在的method,通常是打錯字造成誤判或是根本就還沒宣告。 詳細的列表可以從下方的延伸閱讀中找到。 (2) 內容:undefined method `merge' for [1, 2, 3]:Array 這段訊息較長,但基本上就是標題的延伸,指出哪個地方有問題。以這個錯誤為例,他指出使用者要在[1,2,3]使用mer

ruby on rails

Debugging Rails 沒有錯誤訊息卻還是有bug!要如何即時除錯?

大家應該都遇過這個情形,給了一個method,沒有錯誤訊息,出來的結果卻是錯的! 遇到這樣的情況,要如何判斷是哪裡錯呢?一個一個試嗎? 你需要pry當朋友 強大的即時debugger工具:pry,他就像rails 內建的debugger一樣,擁有強大的除錯功能,但更花俏,也更實在。有以下特點: 1. 排版比起一般的rails console易讀 2. 可選擇不同的操控邏輯 3. 即時攔截,debug當下的variable、method 4. 提供step、next等逐行debug功能 安裝與執行Pry 安裝pry非常簡單,在Gemfile中加入: gem 'pry' gem 'pry-rails' gem 'pry-nav' 接著在console中輸入bundle就完成了。 pry有非常多外掛,包括pry-byebug, pry-nav等一大堆外掛,但隨著版本進步,很多特色都直接放入pry當中了,在這邊介紹幾個比較有特色的。

ruby on rails

Debugging Rails:前端後端到底哪裡出錯?用DevTools來檢視整個流程

數值回傳到前端就是錯!到底是前端的問題還是後端的問題? 通常Rails都會配合複雜的前端框架,例如Ember.js或Angular.js,彼此之間用ajax和json來溝通。在前後端越長越複雜的時候,這種癥結點就會出現了。最好是能先抓出是哪邊的問題,這樣debug才能精確!如果後端工程師debug一整天,結果發現錯是在前端...這... 不過這樣的情況,可以依靠瀏覽器內建的除錯工具,可以幫助我們判斷前後端送資料的詳細內容,可以用這個地方來判斷到底是哪個環節出錯。 1. 如果在發送ajax request的時候就已經有問題,那問題就在前端。 2. 如果是從後端回傳的數值有問題,那問題就在後端。 例如有一個全台灣50歲人口平均收入計算程式,要從資料庫抓出所有人的收入並計算平均。前端傳送一個ajax request到後端資料庫去查詢所有50歲人口的收入,假如送出去的資料是40歲而非50歲,那後端再怎麼精準,傳回前端的數值一定是錯的。反之,如果送出的數值是正確無誤的,那就可以合理懷疑在資料庫進行query時是否有什麼問題? 1. 使用Chrome DevTools 身為

ruby on rails

Debugging Rails入門:五個必備技巧

從第一天學寫code開始,bug就隨之而來。就算只是不小心把true打錯成truee,程式也會很無情的賞你一個大大的錯誤訊息。在學Rails的路上我們都不孤單,不是因為有很棒的Rails社群,而是因為每天都有新的bug相伴左右。 我開發Rails的時間不長,但在一路跌跌撞撞之下,碰過的bug也實在不少。在這邊彙整一些前人的經驗及自身的學習,提供幾個有用的技巧、技巧,希望新手都能快速了解遇到bug時該用什麼樣的方法來應對。 以下分為五篇文章: 第1篇:看懂錯誤訊息 遇到bug,第一件事就是要把訊息看清楚!本篇以非常入門的角度介紹在irb以及Rails當中遇到錯誤時,畫面中的訊息分為哪些區塊,以及該如何解讀。 第2篇:九個常見的錯誤訊息 看懂錯誤訊息以後,如果能自己快速處理掉,那真是再好不過。本篇介紹九個常見的錯誤訊息,分享一些常見狀況,看到底有哪些狀況可以直接照邏輯判斷錯誤的地方。 第3篇:遇到bug直接在瀏覽器除錯 一般來說,遇到bug都是回到code當中瀏覽、思考,但更直接的方法是在遇到bug時直接從瀏覽器的當下狀況直接進行分析。儘管從Rails 4.2.0開始

ruby on rails

ActiveRecord Command Line基本操作指令

Commaned Line常用指令列表 在Rails資料夾底下,執行以下指令,就可以針對資料庫有不同操作,記得前面要加上rake: * db:create 在目前環境當中產生一個空白的資料庫 * db:create:all 在所有環境當中產生空白資料庫 * db:drop 刪除目前環境的資料庫 * db:drop:all 刪除所有環境的資料庫 * db:migrate 依照未執行過的migration檔案更新資料庫 * db:migrate:up依照未執行過的migration,執行一次migration更新資料庫 * db:migrate:down 依照已執行過的migration,退回一次migration * db:migrate:status 顯示目前migration到哪個地步 * db:rollback 退回一次migration * db:forward 更新一次schema檔案 * db:seed 執行 seed.rb 檔案 * db:schema:

開始跟Rails ActiveRecord當好朋友

開啟新的Rails專案以後,第一步就是要資料庫操作開始,也就是產生model檔案。(啥?你不需要用資料庫?那用Rails幹嘛?)本篇簡單說明Rails當中基本的資料庫概念。 1. 為什麼Rails需要使用資料庫? 假如今天我們要儲存部落格所有的post,用.html或.rb檔案來儲存在專案資料夾中,未來這些所有post還要依照開發者的需求來查閱、排序、修改,如果都用文字搜尋的方法來查找,是極其沒有效率的。 因此我們需要一個專門管理資料的系統,讓我們方便對所有資料進行操作,資料庫裡面是各種表格,就像一堆excel的表格一樣,有了這樣的架構,要查找就方便多了! 如果你真的對資料庫一點概念都沒有,建議可以在下方延伸閱讀或是Wiki、Google上大概了解資料庫的意義及目的。 2. Rails的資料庫在哪? 首先要先知道幾件事情: 1. Rails專案資料夾內並不會有『資料庫』這個東西(sqlite除外)。 2. 如果在安裝Rails過程中有安裝過sqlite和mysql,這些套件會去連接系統的資料庫。 3. Rails操作資料庫的套件稱為ActiveRecord

ruby on rails

ActiveRecord Migration 初級演練

在看完先前幾篇有關ActiveRecord的解說,本篇進行一次實際操作,調整資料庫並觀看實際結果。 開啟新專案 $ rails new activerecord 建立model及資料 首先產生model檔案,開始進行資料庫管理: $ rails g model post title:string content:text 接著我們可以使用rails console來查看資料庫內容。如果你有sequel pro之類的GUI,也可以在裡面進行查看。不過因為我們都是初學,可以多操作練習rails console的使用方法。 $ rails c $ Post.inspect (在console中model的名稱第一個字母要大寫) 這時我們會發現有個Table doesn't exist的錯誤,因為我們只在Rails專案中產生檔案,卻沒有移植到資料庫中,所以這時需要先執行: $ rake db:migrate 接著再回Rails console,重複執行上述方法,就可以看到: 以上是我們在產生model檔案時指定他為我們產生的資料庫內容,看起來無誤! 接

ruby on rails

ActiveRecord Migration撰寫方法

開啟rails專案以後,常常會需要對資料庫進行更動,這時就必須依靠Migration的協助。啥?你說為什麼不直接用GUI介面操作資料庫嗎?等有20個以上的table,再這樣做也不遲。本篇列出在撰寫migration檔案時會用到的指令。 Method列表 針對table編修 create_table :table_name do |t| t.type :column_name # 例如 t.integer post_id end drop_table :table_name rename_table :old_table_name, :new_table_name change_table :table_name do |t| t.action :column_name # 例如 t.

ruby on rails

Rails 基本 Helper 介紹

剛開始撰寫Rails時,假如你跟我一樣看不懂一個html.erb檔案裡面有非常多看不懂的東西,也不知道helper是什麼,那你找對地方了,本篇文章簡單說明基本的helper概念,讓你看得懂helper在幹嘛。 Helper是什麼 Helper是一種輔助方法,目的是將Ruby code帶入view當中,而不是單純的平舖直敘。這點也是Rails分工的一環,model和controller的method不能在view當中直接使用,只有helper method才行。 Helper和Helper method差在哪裡? Helper是一個概念,而在Rails架構中helper自己有一個資料夾,我們可以在裡面定義helper method,定義完以後就可以在view當中使用。Rails當中有提供很多內建的helper,只要是.erb結尾的檔案,都可以使用helper,包括html.erb、js.erb等等。 當然,helper這個詞並不會使用於controller和model當中。 <% %>和<%= %> 複習一下,在.erb結尾的檔案當中,可以利用<% %>符號將R

ruby on rails

Rails當中的params是什麼?

我們常在Rails的controller中看到以下code: def show @post = Post.find(params[:id]) end 大家都知道一般的show action是要顯示單一項目的資料,但為什麼是params[:id]而不單純就是id或:id呢? 這邊先解釋一下http request:當使用者點擊連結的時候,會把一個http request送回伺服器,讓伺服器根據需求來將內容傳回瀏覽器。最簡單的例子就是我們輸入google.com時,傳送了一個http request給google的伺服器,他才將首頁內容回傳到瀏覽器上並顯示。 在Rails當中,http request會經過ActionController這個內建的機制來消化,並將可用的變數轉換為params這個變數,交由controller處理。底下會包含許多例如填寫表格的內容或其他變數,以hash的方式呈現: params = {:post => "Rails is Good", :content => "I love Ruby on Rails"

ruby on rails

認識Rails ActiveRecord系列:文章導讀

剛開始學習Ruby on Rails時,不知你有沒有跟我一樣遇到幾個問題: 1. 為什麼在安裝Rails環境時需要使用『資料庫』這個玩意兒? 2. model儲存的資料在哪裡?怎麼專案資料夾都找不到? 3. db:migrate是什麼意思? 對我這種半路出家直接挑戰Rails的人來說,每次遇到『資料庫』這個用詞是一點頭緒都沒有。本系列就是簡單帶領各位讀者了解Rails與資料庫的關係,以及基本操作方法,由於本人並非本科系出生,因此會由幾個比較『世俗』一點的角度來說明資料庫的概念,希望大家都能夠有個初步認識。 1. 開始跟ActiveRecord當好朋友 1. Rails為何需要資料庫 2. Rails與資料庫如何進行連結 3. 操作及讀取資料庫的方法 2. Command Line基本操作指令 1. 如何從Command Line環境中操作Rails資料庫 2. 指令表 3. 新增、修改、刪除、重置資料庫 4. schema.rb及seed.rb檔案說明