[Ruby on Rails] 好用的will_paginate及simpl_ form_for

網站傳送門: https://gentle-inlet-97986.herokuapp.com/

主題是一個書評網站,需要登入才能發表評論,可以自行上傳書的圖片,也可以搜尋現有的書籍資訊。

(基本架構是照著Rails 101的教學做出來的,自己另外再加了一些小功能)


此篇主要紀錄如何使用will paginate 及 simple form for這兩個方便又好用的gem來使網站變得更美觀。

use simple_form_for

Simple_form_for 是一個好用的gem,可以自動調整格式

如果還沒安裝的話,記得先在gemfile裡面新增gem "simple_form" ,然後 bundle install

下一步:

rails generate simple_form:install --bootstrap 執行boostrap的設定

就可以使用simple_form_for了!

使用方法也很簡單,只要將原本是form_for 的部分都替換成simple_form_for 並照著規定的格式更改內容就行了。

<%= simple_form_for @group do |f| %>
	<%= f.input :description, input_html: { class: "form-horizontal", :rows => 4} %>
<% end %>

:rows 可以用來調輸入框的高度

這是使用simple_form_for的效果:

simple_form_for_before

Simple_form_for會自動偵測不可空白的欄位,並給出警告:

simple_form_for_adjustment

這段和上面的simple_form_for能達到的效果幾乎是一模一樣的,但明顯就囉唆了點XD


will paginate

不管是什麼網站,紀錄一多,就會落落長讓人眼花撩亂,這時候有個好看簡單的分頁功能就顯得格外重要了!

安裝完will_paginate後,也要記得在寫進Gemfile 裡面

首先,在App/controllers/groups_controller.rb 當中加入

@posts = @group.posts.recent.paginate(:page => params[:page], :per_page => 10)

此時若是直接rails server 的話會一直出現undefined method “recent”

這是因為系統當中並沒有名為recent的方法,要自己去app/models/post.rb 中加入

scope :recent, -> {order("created_at DESC")}

此時應該就可以順利看到分頁了!

paginate