您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關為Web開發提供的10個Ruby on Rails Gems有哪些,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
在這里,值得推薦的 Ruby on Rails 的 web 開發的插件包括 Capistrano 和 Foreigner。
我用 Ruby on Rails 開發已經有很多年了,用這個優秀的框架我完成了很多任務,其中有些可以算是非常復雜的項目。基于我的經驗,我來推薦一些我覺得非常有用的 gem。
不幸的是,gem 的格式描述不支持分類和標簽。所以我們不得不期望 gem 的作者在描述里列出我們需要的關鍵字,這樣在搜索的時候才能更好的得到結果。你可以在 rubygems.org 或者 github.com 上找到很多 gem。可以通過描述去進行搜索(GitHub 上你還可以在語言列表中選上 Ruby)
另一個值得介紹的是 Ruby Toolbox。它可以讓你按分類和熱度進行搜索。不過不要僅依賴這個工具,因為 Ruby Toolbox 的作者是手工添加新的 gem 的。
Foreigner
這個 gem 可以幫你創建表的外鍵,它非常容易使用。你只需要簡單的把它加到 Gemfile,它會為你的 migrations 增加兩個方法 :add_foreign_key 和 remove_foreign_key。當然,你也可以使用這兩個方法在 create_table 和 change_table 的時候添加或刪除 key。
假設我們需要添加一個 key,這個 key 從 comment 表指向 posts 表。我們可以這樣做:
class CreateComments < ActiveRecord::Migration def change create_table :comments do |t| # … t.references :post # ... t.foreign_key :posts end # … end end
這些方法有一些額外的選項,例如 name,column,dependent。你可以參考文檔。
也許有人會認為,準確的說這個 gem 并非只適用于 Rails 的新版本,不過它確實是只有 4.2 以上的版本才支持的(其實之前已經有第三方的支持了)。總之,我認為這個 gem 屬于最有用的 gem 列表之一。
項目的 GitHub 鏈接
letter_opener
事實上,一個簡單而有用的 gem,它是保存文件夾電子郵箱的一個插件而不是發送它們。通過激活這個 gem,你必須設置 letter_opener 作為應用配置中的遞交方式(例如在 config/enviroments/development.rb之中)
太好啦!現在所有發出去的消息將被存貯在 /tmp/letter_opener
文件夾里,并且新的電子郵箱被發送之后會在瀏覽器中預覽。它簡單且實際。
請鏈接到Github。
Kaminari
該 gem 允許你很容易的創建任一復雜性的 paginators 模塊。Kaminari 支持幾個ORMs(ActiveRecord,Mongoid,MongoMapper)以及模板引擎(ERB,Haml,Slim)。
Kaminari 并不嵌套基礎類:如 array,hash,Object 以及 ActiveRecord::Base。
讓我們開始使用 Kaminari 吧,把它放在 gem 文件中,已經足夠啦。某些功能變成可用之后,例如:頁,每個以及對齊。現在,你可以借助于Kaminari.paginate_數組方法,來輕松地把你的 數組轉換成一個分頁模塊,然后許多有用的分頁功能將可以訪問。
@paginatable_array = Kaminari.paginate_array(my_array_object).page(params[:page]).per(10)
默認的配置將被生成在 Kaminari· 配置初始化程序中。
default_per_page, max_per_page, max_pages – 這是一個簡要的能被設置的選項列表。
除此之外,該分頁的每個模塊能被獨立的配置。
class User < ActiveRecord::Base paginates_per 50 end
如果你需要定制 paginator,你可以通過運行一個生成器來創建模板:
% rails g kaminari:views default # -e haml - if you want to use HAML template engine.
該模板將被創建于 app/views/kaminari/ 之中,現在,你可以輕松地編輯他們。
本地化(I18n)標簽,主題和友好的 urls,以及其他有用的 gem 文檔選項能被找到。
請鏈接到 Github
CarrierWave
使用 CarrierWave 讓你能夠從你的 RoR 應用程序中上傳任何文件。所有你需要做的事情如下:
創建一個 uploader:
rails generate uploader ProductPhotoUploader
添加一些選項:
class ProductPhotoUploader < CarrierWave::Uploader::Base include CarrierWave::MiniMagick storage :file def store_dir "product_images" end def extension_white_list %w(jpg jpeg gif png) end def filename Digest::SHA1.hexdigest(self.read) + File.extname(original_filename) end end
你已經可以使用 uploader 在存儲器中保存文件了。
uploader = ProductPhotoUploader.new uploader.store!(my_file)
CarrierWave 還允許你在臨時存儲、文件系統、甚至是云空間中儲存文件。
你可以將 CarrierWave uploader 連接到 AR(還有其他 ORM 適配器)模型,并通過在數據庫中保存一條記錄來存儲你的文件:
class Retailer < ActiveRecord::Base mount_uploader :logo, RetailerLogoUploader end retailer = Retailer.new File.open('logo.jpg') { |f| retailer.logo = f } retailer.save! retailer.logo.url # => '/url/to/logo.png'
此外,也可以改變上傳圖像的品質,對它進行剪裁,加密文件以及在運行中做更多的事情,在上傳時 – 所有這一切都可以在文檔中找到。
訪問項目的 GitHub 鏈接。
Urlify
用于將 diacritic 字符串轉換為 ASCII-safe URI 字符串的一個簡單且易于使用的 gem。在安裝好這個 gem 之后,你可以為任何東西調用 urlify 函數,它將會立即被轉換為一個等價的兼容 URI。
URLify.urlify('Kj?le Test') #=> kjoele_test
或:
URLify.urlify('Kj?le Test', '-') #=> kjoele-test
訪問項目的 GitHub 鏈接。
WickedPdf
WickedPdf 是一個用于將 html 生成為 PDF 的 RoR 插件。在添加這個 gem 之后,你需要做以下步驟:
創建初始化:
rails generate wicked_pdf
注冊 mine-type:
Mime::Type.register "application/pdf", :pdf
考慮到這個 gem 使用了 wkhtmltopdf,所以應該在 gem 的設置中指定其路徑。
WickedPdf.config = { exe_path: '/usr/local/bin/wkhtmltopdf' }
訪問該項目的 GitHub 鏈接。
Countries
如果你面臨著需要處理關于不同國家的信息的任務,這個 gem 將會提供你解決這個問題所需要的所有數據。有按國家名稱和區域搜索,貨幣信息(符號,代碼),各種形式的電話號碼,坐標等功能。所有這一切需要你在安裝它 之后創建一個 country 對象(或者從一個全局 helper 中獲取),然后你就可以得出必要的信息了:
c = ISO3166::Country.new('UA') # or to use global helper = Country['UA'] c.name #=> "Ukraine" c.alpha2#=> "UK" c.alpha3#=> "UKR" c.longitude #=> "49 00 N" c.latitude #=> "32 00 E"
以下為關于如何獲取貨幣信息的代碼:
c.currency.code #=> "UAH" c.currency.symbol #=> "?" c.currency.name #=> "Hryvnia"
或者檢查該國是否為歐盟成員:
c.in_eu? #=> false
以下為通過名稱以及貨幣代碼搜索國家的示例:
c = ISO3166::Country.find_country_by_name('Ukraine')
c = ISO3166::Country.find_country_by_currency('UAH')
訪問該項目的 GitHub 鏈接。
CanCanCan
這個庫讓你可以很方便的在 RoR 中配置權限。使用它你可以很容易的實現對特定資源的訪問的限制。其便利之處在于權限的管理是跟用戶分離的,而且所有的權限都存儲在一個單獨的地方。這就是為什么你不用再控制器、視圖和數據庫請求中重復地做一些事情。
這個庫需要在控制器中定義一個 current_user 方法。所以你首先要對身份認證信息進行配置(這次我用到了 Devise, 不過其它的gem也可以做到)。然后. Then, generate an ability:
rails g cancan:ability
使用 :read, :create, :update 和 :destroy 這些命令來指定用戶權限 (can/cannot 方法), (你可以在文檔中找到更多)。
class Article::Ability include CanCan::Ability def initialize(user) case user when Admin cannot :manage, :profile can :read, :all when Moderator can :manage, [Apartment, RoomPrice], { lessor_id: user.id } can :manage, Photo, { photographer_id: user.id } can :manage, Lessor, { id: user.id } can :manage, :profile end end end
之后,在視圖中你可以使用 can? 和 cannot? 輔助方法來檢查當前用戶對于給定action的權限:
<% if can? :update, @article %> <%= link_to "Edit", edit_article_path(@article) %> <% end %>
你還可以使用 authorize! 來對控制器中的action進行權限認證:
def show @article = Article.find(params[:id]) authorize! :read, @article end
或者你也用到前置過濾器 load_and_authorize_resource, 它會加載資源同時嘗試對其進行權限認證。
你可以使用下面的方式來catch由 CanCan::AccessDenied拋出的異常來處理有關權限認證方面的錯誤:
class ApplicationController < ActionController::Base rescue_from CanCan::AccessDenied do |exception| redirect_to root_url, :alert => exception.message end end
其它信息可以在 GitHub 上的文檔中找到。
鏈接到 GitHub.
Formtastic
該 gem 提供很棒的 DSL 支持,讓你可以很容易的構建出漂亮直觀的基于語義的 rich form,它提供的 DSL 很容易上手:只需要在一個 Semantic_form_for 代碼塊里列出所有的字段,然后就可以得到一個漂亮的 form:
<%= semantic_form_for @post do |f| %> <%= f.inputs "Basic", :id => "basic" do %> <%= f.input :title %> <%= f.input :body %> <% end %> <%= f.inputs :name => "Advanced Options", :id => "advanced" do %> <%= f.input :slug, :label => "URL Title", :hint => "Created automatically if left blank", :required => false %> <%= f.input :section, :as => :radio %> <%= f.input :user, :label => "Author" %> <%= f.input :categories, :required => false %> <%= f.input :created_at, :as => :string, :label => "Publication Date", :required => false %> <% end %> <%= f.actions do %> <%= f.action :submit %> <% end %> <% end %>
你也可以使用嵌套的資源:
<%= semantic_form_for [@author, @post] do |f| %>
也支持嵌套的 form。你可以使用 f.semantic_form_for(Rails 風格),不過 Formtastic 風格的寫法更好看一些,你可以使用 :for 選項。
<%= semantic_form_for @post do |f| %> <%= f.inputs :title, :body, :created_at %> <%= f.inputs :first_name, :last_name, :for => :author, :name => "Author" %> <%= f.actions %> <% end %>
你可以很容易的更改 input 的行為:
class StringInput < Formtastic::Inputs::StringInput def to_html puts "this is my modified version of StringInput" super end end
基于已有的input創建自己的input:
class FlexibleTextInput < Formtastic::Inputs::StringInput def input_html_options super.merge(:class => "flexible-text-area") end end
或者創建一個全新的 input 類型:
class DatePickerInput include Formtastic::Inputs::Base def to_html # ... end end
使用方式:
:as => :date_picker
Formtastic 支持相當多的 input 類型 (select, check_boxes, radio, time_zone, datetime_select, range),基本及高級的本地化,belongs_to,has_many和has_and_belongs_to_many 的關聯以及其他很多特性,具體參考文檔。
GitHub 的項目鏈接。
Capistrano
該工具允許在多個遠程機器上通過 ssh 的并發來執行命令。此 gem 容易使用 DSL。它使您能夠定義將應用于某些角色機器的任務,并且通過網關機器來支持隧道連接。
打開 gem 之后,你必須執行:
bundle exec cap install
通過配置創建文件夾
如果你將使用不同的環境,你必須增加 STAGES 參數,例如:STAGES = local, sandbox, qa, production。運行一個 cap 腳本,使用該命令-
bundle exec cap [environments separated by gaps] [command]。例如,將部署看起來就如此的舞臺環境:
bundle exec cap staging deploy
Capistrano DSL 通過 Rake 來借用。以下是該任務的一個簡單例子:
server 'example.com', roles: [:web, :app] server 'example.org', roles: [:db, :workers] desc "Report Uptimes" task :uptime do on roles(:all) do |host| execute :any_command, "with args", :here, "and here" info "Host #{host} (#{host.roles.to_a.join(', ')}):/t#{capture(:uptime)}" end end
參閱所有可能的參數文檔,更多關于定義任務的詳細細節,請連接該插件和其他東西。
鏈接到Github。
看完上述內容,你們對為Web開發提供的10個Ruby on Rails Gems有哪些有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。