自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

為Web開(kāi)發(fā)提供的10個(gè)Ruby on Rails Gems

開(kāi)發(fā) 前端
我用 Ruby on Rails 開(kāi)發(fā)已經(jīng)有很多年了,用這個(gè)優(yōu)秀的框架我完成了很多任務(wù),其中有些可以算是非常復(fù)雜的項(xiàng)目?;谖业慕?jīng)驗(yàn),我來(lái)推薦一些我覺(jué)得非常有用的 gem。本文就會(huì)分享這個(gè)推薦列表,還會(huì)告訴你如何找到 RoR 有用的 gem。

在這里,值得推薦的 Ruby on Rails 的 web 開(kāi)發(fā)的插件包括 Capistrano 和 Foreigner。

我用 Ruby on Rails 開(kāi)發(fā)已經(jīng)有很多年了,用這個(gè)優(yōu)秀的框架我完成了很多任務(wù),其中有些可以算是非常復(fù)雜的項(xiàng)目?;谖业慕?jīng)驗(yàn),我來(lái)推薦一些我覺(jué)得非常有用的 gem。本文就會(huì)分享這個(gè)推薦列表,還會(huì)告訴你如何找到 RoR 有用的 gem。

[[161189]]

不幸的是,gem 的格式描述不支持分類和標(biāo)簽。所以我們不得不期望 gem 的作者在描述里列出我們需要的關(guān)鍵字,這樣在搜索的時(shí)候才能更好的得到結(jié)果。你可以在 rubygems.org 或者 github.com 上找到很多 gem。可以通過(guò)描述去進(jìn)行搜索(GitHub 上你還可以在語(yǔ)言列表中選上 Ruby)

另一個(gè)值得介紹的是 Ruby Toolbox。它可以讓你按分類和熱度進(jìn)行搜索。不過(guò)不要僅依賴這個(gè)工具,因?yàn)?Ruby Toolbox 的作者是手工添加新的 gem 的。

Foreigner

這個(gè) gem 可以幫你創(chuàng)建表的外鍵,它非常容易使用。你只需要簡(jiǎn)單的把它加到 Gemfile,它會(huì)為你的 migrations 增加兩個(gè)方法 :add_foreign_key 和 remove_foreign_key。當(dāng)然,你也可以使用這兩個(gè)方法在 create_table 和 change_table 的時(shí)候添加或刪除 key。

假設(shè)我們需要添加一個(gè) key,這個(gè) key 從 comment 表指向 posts 表。我們可以這樣做:

  1. class CreateComments < ActiveRecord::Migration 
  2. def change 
  3. create_table :comments do |t| 
  4. # … t.references :post 
  5. # ... 
  6. t.foreign_key :posts 
  7. end 
  8. # … 
  9. end 
  10. end 

這些方法有一些額外的選項(xiàng),例如 name,column,dependent。你可以參考文檔

也許有人會(huì)認(rèn)為,準(zhǔn)確的說(shuō)這個(gè) gem 并非只適用于 Rails 的新版本,不過(guò)它確實(shí)是只有 4.2 以上的版本才支持的(其實(shí)之前已經(jīng)有第三方的支持了)。總之,我認(rèn)為這個(gè) gem 屬于最有用的 gem 列表之一。

項(xiàng)目的 GitHub 鏈接

letter_opener

事實(shí)上,一個(gè)簡(jiǎn)單而有用的 gem,它是保存文件夾電子郵箱的一個(gè)插件而不是發(fā)送它們。通過(guò)激活這個(gè) gem,你必須設(shè)置 letter_opener 作為應(yīng)用配置中的遞交方式(例如在 config/enviroments/development.rb之中)

太好啦!現(xiàn)在所有發(fā)出去的消息將被存貯在 /tmp/letter_opener

文件夾里,并且新的電子郵箱被發(fā)送之后會(huì)在瀏覽器中預(yù)覽。它簡(jiǎn)單且實(shí)際。

請(qǐng)鏈接到Github。

Kaminari

該 gem 允許你很容易的創(chuàng)建任一復(fù)雜性的 paginators 模塊。Kaminari 支持幾個(gè)ORMs(ActiveRecord,Mongoid,MongoMapper)以及模板引擎(ERB,Haml,Slim)。

Kaminari 并不嵌套基礎(chǔ)類:如 array,hash,Object 以及 ActiveRecord::Base。

讓我們開(kāi)始使用 Kaminari 吧,把它放在 gem 文件中,已經(jīng)足夠啦。某些功能變成可用之后,例如:頁(yè),每個(gè)以及對(duì)齊。現(xiàn)在,你可以借助于Kaminari.paginate_數(shù)組方法,來(lái)輕松地把你的 數(shù)組轉(zhuǎn)換成一個(gè)分頁(yè)模塊,然后許多有用的分頁(yè)功能將可以訪問(wèn)。

@paginatable_array = Kaminari.paginate_array(my_array_object).page(params[:page]).per(10)

默認(rèn)的配置將被生成在 Kaminari· 配置初始化程序中。

default_per_page, max_per_page, max_pages – 這是一個(gè)簡(jiǎn)要的能被設(shè)置的選項(xiàng)列表。

除此之外,該分頁(yè)的每個(gè)模塊能被獨(dú)立的配置。

  1. class User < ActiveRecord::Base  
  2. paginates_per 50 
  3. end 

如果你需要定制 paginator,你可以通過(guò)運(yùn)行一個(gè)生成器來(lái)創(chuàng)建模板:

% rails g kaminari:views default # -e haml - if you want to use  HAML template engine.

該模板將被創(chuàng)建于 app/views/kaminari/ 之中,現(xiàn)在,你可以輕松地編輯他們。

本地化(I18n)標(biāo)簽,主題和友好的 urls,以及其他有用的 gem 文檔選項(xiàng)能被找到。

請(qǐng)鏈接到 Github

CarrierWave

使用 CarrierWave 讓你能夠從你的 RoR 應(yīng)用程序中上傳任何文件。所有你需要做的事情如下:

創(chuàng)建一個(gè) uploader:

 

  1. rails generate uploader ProductPhotoUploader 

添加一些選項(xiàng):

  1. class ProductPhotoUploader < CarrierWave::Uploader::Base 
  2. include CarrierWave::MiniMagick 
  3. storage :file 
  4. def store_dir 
  5. "product_images" 
  6. end 
  7. def extension_white_list 
  8. %w(jpg jpeg gif png) 
  9. end 
  10. def filename 
  11. Digest::SHA1.hexdigest(self.read) + File.extname(original_filename) 
  12. end 
  13. end 

你已經(jīng)可以使用 uploader 在存儲(chǔ)器中保存文件了。

  1. uploader = ProductPhotoUploader.new 
  2. uploader.store!(my_file) 

CarrierWave 還允許你在臨時(shí)存儲(chǔ)、文件系統(tǒng)、甚至是云空間中儲(chǔ)存文件。

你可以將 CarrierWave uploader 連接到 AR(還有其他 ORM 適配器)模型,并通過(guò)在數(shù)據(jù)庫(kù)中保存一條記錄來(lái)存儲(chǔ)你的文件:

  1. class Retailer < ActiveRecord::Base 
  2. mount_uploader :logo, RetailerLogoUploader 
  3. end 
  4. retailer = Retailer.new 
  5. File.open('logo.jpg') { |f| retailer.logo = f } 
  6. retailer.save! 
  7. retailer.logo.url # => '/url/to/logo.png' 

此外,也可以改變上傳圖像的品質(zhì),對(duì)它進(jìn)行剪裁,加密文件以及在運(yùn)行中做更多的事情,在上傳時(shí) – 所有這一切都可以在文檔中找到。

訪問(wèn)項(xiàng)目的 GitHub 鏈接。

Urlify

用于將 diacritic 字符串轉(zhuǎn)換為 ASCII-safe URI 字符串的一個(gè)簡(jiǎn)單且易于使用的 gem。在安裝好這個(gè) gem 之后,你可以為任何東西調(diào)用 urlify 函數(shù),它將會(huì)立即被轉(zhuǎn)換為一個(gè)等價(jià)的兼容 URI。

  1. URLify.urlify('Kj?le Test') #=> kjoele_test 

或:

  1. URLify.urlify('Kj?le Test''-') #=> kjoele-test 

訪問(wèn)項(xiàng)目的 GitHub 鏈接。

WickedPdf

WickedPdf 是一個(gè)用于將 html 生成為 PDF 的 RoR 插件。在添加這個(gè) gem 之后,你需要做以下步驟:

創(chuàng)建初始化:

  1. rails generate wicked_pdf 

注冊(cè) mine-type:

Mime::Type.register "application/pdf", :pdf

考慮到這個(gè) gem 使用了 wkhtmltopdf,所以應(yīng)該在 gem 的設(shè)置中指定其路徑。

WickedPdf.config = { exe_path: '/usr/local/bin/wkhtmltopdf' }

訪問(wèn)該項(xiàng)目的 GitHub 鏈接

Countries

如果你面臨著需要處理關(guān)于不同國(guó)家的信息的任務(wù),這個(gè) gem 將會(huì)提供你解決這個(gè)問(wèn)題所需要的所有數(shù)據(jù)。有按國(guó)家名稱和區(qū)域搜索,貨幣信息(符號(hào),代碼),各種形式的電話號(hào)碼,坐標(biāo)等功能。所有這一切需要你在安裝它 之后創(chuàng)建一個(gè) country 對(duì)象(或者從一個(gè)全局 helper 中獲?。?,然后你就可以得出必要的信息了:

  1. c = ISO3166::Country.new('UA'
  2. # or to use global helper  = Country['UA'
  3. c.name      #=> "Ukraine" 
  4. c.alpha2#=> "UK" c.alpha3#=> "UKR" 
  5. c.longitude #=> "49 00 N" 
  6. c.latitude  #=> "32 00 E" 

以下為關(guān)于如何獲取貨幣信息的代碼:

  1. c.currency.code   #=> "UAH" 
  2. c.currency.symbol #=> "?" 
  3. c.currency.name   #=> "Hryvnia" 

或者檢查該國(guó)是否為歐盟成員:

c.in_eu? #=> false

以下為通過(guò)名稱以及貨幣代碼搜索國(guó)家的示例:

c = ISO3166::Country.find_country_by_name('Ukraine') 
c = ISO3166::Country.find_country_by_currency('UAH')

訪問(wèn)該項(xiàng)目的 GitHub 鏈接。

CanCanCan

這個(gè)庫(kù)讓你可以很方便的在 RoR 中配置權(quán)限。使用它你可以很容易的實(shí)現(xiàn)對(duì)特定資源的訪問(wèn)的限制。其便利之處在于權(quán)限的管理是跟用戶分離的,而且所有的權(quán)限都存儲(chǔ)在一個(gè)單獨(dú)的地方。這就是為什么你不用再控制器、視圖和數(shù)據(jù)庫(kù)請(qǐng)求中重復(fù)地做一些事情。

這個(gè)庫(kù)需要在控制器中定義一個(gè) current_user 方法。所以你首先要對(duì)身份認(rèn)證信息進(jìn)行配置(這次我用到了 Devise, 不過(guò)其它的gem也可以做到)。然后. Then, generate an ability:

rails g cancan:ability

使用 :read, :create, :update 和 :destroy 這些命令來(lái)指定用戶權(quán)限 (can/cannot 方法), (你可以在文檔中找到更多)。

  1. class Article::Ability   
  2.   include CanCan::Ability 
  3.   def initialize(user) 
  4. case user    
  5.   when Admin      
  6.     cannot :manage, :profile      
  7.     can :read, :all        
  8.   when Moderator      
  9.     can :manage, [Apartment, RoomPrice], { lessor_id: user.id }         
  10.     can :manage, Photo, { photographer_id: user.id }      
  11.     can :manage, Lessor, { id: user.id }      
  12.     can :manage, :profile  
  13. end 
  14.   end 
  15. end 

之后,在視圖中你可以使用 can? 和 cannot? 輔助方法來(lái)檢查當(dāng)前用戶對(duì)于給定action的權(quán)限:

<% if can? :update, @article %> <%= link_to "Edit", edit_article_path(@article) %> <% end %>

你還可以使用 authorize! 來(lái)對(duì)控制器中的action進(jìn)行權(quán)限認(rèn)證:

  1. def show   
  2.   @article = Article.find(params[:id])   
  3.   authorize! :read, @article 
  4. end 

或者你也用到前置過(guò)濾器 load_and_authorize_resource, 它會(huì)加載資源同時(shí)嘗試對(duì)其進(jìn)行權(quán)限認(rèn)證。

你可以使用下面的方式來(lái)catch由 CanCan::AccessDenied拋出的異常來(lái)處理有關(guān)權(quán)限認(rèn)證方面的錯(cuò)誤:

  1. class ApplicationController < ActionController::Base  
  2. rescue_from CanCan::AccessDenied do |exception|  
  3. redirect_to root_url, :alert => exception.message  
  4. end 
  5. end 

其它信息可以在 GitHub 上的文檔中找到。

鏈接到 GitHub.

Formtastic

該 gem 提供很棒的 DSL 支持,讓你可以很容易的構(gòu)建出漂亮直觀的基于語(yǔ)義的 rich form,它提供的 DSL 很容易上手:只需要在一個(gè) Semantic_form_for 代碼塊里列出所有的字段,然后就可以得到一個(gè)漂亮的 form:

  1. <%= semantic_form_for @post do |f| %>  
  2. <%= f.inputs "Basic", :id => "basic" do %>  
  3. <%= f.input :title %>  
  4. <%= f.input :body %>  
  5. <% end %>  
  6. <%= f.inputs :name => "Advanced Options", :id => "advanced" do %>  
  7. <%= f.input :slug, :label => "URL Title", :hint => "Created automatically if left blank", :required => false %>  
  8. <%= f.input :section, :as => :radio %>  
  9. <%= f.input :user, :label => "Author" %>  
  10. <%= f.input :categories, :required => false %>  
  11. <%= f.input :created_at, :as => :string, :label => "Publication Date", :required => false %>  
  12. <% end %> 
  13. <%= f.actions do %> 
  14. <%= f.action :submit %>  
  15. <% end %> 
  16. <% end %> 

你也可以使用嵌套的資源:

  1. <%= semantic_form_for [@author@postdo |f| %> 

也支持嵌套的 form。你可以使用 f.semantic_form_for(Rails 風(fēng)格),不過(guò) Formtastic 風(fēng)格的寫法更好看一些,你可以使用 :for 選項(xiàng)。

  1. <%= semantic_form_for @post do |f| %> 
  2. <%= f.inputs :title, :body, :created_at %>  
  3. <%= f.inputs :first_name, :last_name, :for => :author, :name => "Author" %>  
  4. <%= f.actions %> 
  5. <% end %> 

你可以很容易的更改 input 的行為:

  1. class StringInput < Formtastic::Inputs::StringInput  
  2. def to_html 
  3. puts "this is my modified version of StringInput" 
  4. super 
  5. end 
  6. end 

基于已有的input創(chuàng)建自己的input:

  1. class FlexibleTextInput < Formtastic::Inputs::StringInput  
  2. def input_html_options  
  3. super.merge(:class => "flexible-text-area"
  4. end 
  5. end 

或者創(chuàng)建一個(gè)全新的 input 類型:

  1. class DatePickerInput  
  2. include Formtastic::Inputs::Base 
  3. def to_html 
  4. # ... 
  5. end 
  6. end 

使用方式:

 :as => :date_picker

Formtastic 支持相當(dāng)多的 input 類型 (select, check_boxes, radio, time_zone, datetime_select, range),基本及高級(jí)的本地化,belongs_to,has_many和has_and_belongs_to_many 的關(guān)聯(lián)以及其他很多特性,具體參考文檔。

GitHub 的項(xiàng)目鏈接。

Capistrano

該工具允許在多個(gè)遠(yuǎn)程機(jī)器上通過(guò) ssh 的并發(fā)來(lái)執(zhí)行命令。此 gem 容易使用 DSL。它使您能夠定義將應(yīng)用于某些角色機(jī)器的任務(wù),并且通過(guò)網(wǎng)關(guān)機(jī)器來(lái)支持隧道連接。

打開(kāi) gem 之后,你必須執(zhí)行:

bundle exec cap install

通過(guò)配置創(chuàng)建文件夾

如果你將使用不同的環(huán)境,你必須增加 STAGES 參數(shù),例如:STAGES = local, sandbox, qa, production。運(yùn)行一個(gè) cap 腳本,使用該命令-

bundle exec cap [environments separated by gaps] [command]。例如,將部署看起來(lái)就如此的舞臺(tái)環(huán)境:

bundle exec cap staging deploy

Capistrano DSL 通過(guò) Rake 來(lái)借用。以下是該任務(wù)的一個(gè)簡(jiǎn)單例子:

  1. server 'example.com', roles: [:web, :app] 
  2. server 'example.org', roles: [:db, :workers] 
  3. desc "Report Uptimes" 
  4. task :uptime do  
  5. on roles(:all) do |host| 
  6. execute :any_command, "with args", :here, "and here" 
  7. info "Host #{host} (#{host.roles.to_a.join(', ')}):/t#{capture(:uptime)}" 
  8. end 
  9. end 

參閱所有可能的參數(shù)文檔,更多關(guān)于定義任務(wù)的詳細(xì)細(xì)節(jié),請(qǐng)連接該插件和其他東西。

鏈接到Github。

好啦,我們來(lái)回顧十個(gè)最有用的 Ruby on rails gems,該是我的故事將要大結(jié)局了,我希望你能找到這個(gè)有用的信息。在我與 Evgeniy Maslov 合作而發(fā)表的“Ruby on rails 之中的 eway 支付網(wǎng)關(guān)集成”文章里,你將閱讀更多關(guān)于 Ruby on rails。謝謝你們,再見(jiàn)了,親愛(ài)的讀者。

 

 

責(zé)任編輯:王雪燕 來(lái)源: oschina
相關(guān)推薦

2014-09-18 09:50:32

Ruby on Rai

2010-08-13 08:59:58

Rails

2009-05-18 09:12:59

JavaRuby on RaiMVC

2009-07-20 09:12:54

Ruby on Rai

2009-08-27 10:21:22

Ruby on Rai

2017-11-29 14:48:01

Node.JSRails語(yǔ)言

2009-12-14 15:37:35

Ruby on Rai

2009-12-18 13:49:40

Ruby Watir

2009-09-23 17:42:13

以表單為中心面向表單編程

2010-07-27 09:06:11

Ruby on Rai

2009-04-23 09:39:31

Ruby on Rai開(kāi)發(fā)網(wǎng)站

2009-08-06 09:13:36

Ruby on Rai

2010-09-25 14:39:29

Bruce Tate

2009-09-29 17:04:29

2010-07-13 09:31:08

RubyRuby on Rai

2009-12-18 11:14:26

Ruby On Rai

2011-08-05 08:57:14

Ruby

2015-10-14 17:27:18

性能

2009-12-17 14:29:50

Ruby on Rai

2009-12-14 15:30:43

安裝Ruby on R
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)