2009-04-21 24 views
5

Tôi đã xem xét những điều sau đây, nhưng chúng không rõ ràng, đặc biệt là tham chiếu đến các phụ thuộc của DataMapper và gem.Làm cách nào để thêm gravatar/identicons vào Ruby on Rails?

Tất cả những gì tôi muốn là kết quả là có thể lấy giá trị @ user.email của mình trong một | do | lặp lại và hiển thị một gravatar nơi identicon được đặt thành "y" - nói cách khác, những bản vẽ có vẻ ngẫu nhiên dễ thương đó!

Nhưng khi tôi nhìn vào những gì có sẵn, không rõ phải làm gì - đặc biệt là các tham chiếu đến DataMapper và phụ thuộc đá quý.

http://github.com/chrislloyd/gravtastic/tree/master

Tôi đang chơi xung quanh với điều này, nhưng tôi muốn nhận được phản hồi từ những người khác trước khi lặn quá sâu!

http://www.thechrisoshow.com/2008/10/27/adding-gravatars-to-your-rails-apps

Tôi đã cài đặt Plugin rừng gravatar:

http://github.com/woods/gravatar-plugin/tree/master mà là giống như một nêu dưới đây ... Tuy nhiên, tôi nhận được một lỗi khi tôi gõ vào:

<%= gravatar_for @user %> 

Lỗi này là:

undefined method `gravatar_for' for #<ActionView::Base:0x474ddf4> 
+0

Hi, tôi là tác giả của Gravtastic. Tôi đã cập nhật thư viện và làm cho README rõ ràng hơn một chút. Ping tôi nếu bạn cần bất kỳ trợ giúp bằng cách sử dụng nó. –

Trả lời

1

Có một plugin Gravatar Rails có thể được tìm thấy ở đây:

http://gravatarplugin.rubyforge.org/

Cài đặt plugin như thế này:

ruby script/plugin install svn://rubyforge.org//var/svn/gravatarplugin/plugins/gravatar 

Sau khi cài đặt plugin, nếu mô hình của bạn phản ứng với một 'email 'phương pháp, thẻ này sẽ hiển thị Gravatar:

<%= gravatar_for @user %> 
+0

Xin chào, tôi đã cài đặt và tôi gặp lỗi: phương thức chưa xác định 'gravatar_for 'cho # Angela

+0

Có điều gì tôi phải làm để" bật "không? Tôi nhận thấy rằng nó tạo ra một plugin gọi là gravatar-plugin ... tôi có cần đổi tên nó không? Tôi đã phải làm điều đó cho restful_authentication. – Angela

+2

Bạn đã khởi động lại máy chủ chưa? – Terry

1

Bạn cần phải MD5 hash địa chỉ email và sau đó đặt nó vào một URL gravatar. Điều đó sẽ cung cấp cho bạn URL hình ảnh. Dưới đây là ví dụ về cách thực hiện.

http://www.gravatar.com/avatar/ md5(email) ?s=128&d=identicon&r=PG 

Nếu bạn muốn những bản vẽ ngẫu nhiên xuất hiện, bạn có thể sử dụng băm MD5 để lấy chúng. Bạn có thể băm giá trị khóa trong một vòng lặp và có được một danh sách theo cách đó.

+0

Làm cách nào để thêm d = identicon khi tôi sử dụng plugin gravatar? – Angela

+0

cùng một câu hỏi .. – SuperString

8

Không lặp lại quá nhiều, nhưng thay vì trả lời chi tiết hơn:

Như Sam152 đã nói, bạn phải tạo một mã băm MD5 từ địa chỉ email của người dùng sau đó được sử dụng trong yêu cầu GET tới máy chủ gravatar.

Cách dễ nhất để truy cập vào băm MD5 là thông qua Digest, một phần của đá quý ActionPack (bên trong ActionView). Đặt sau trong 'config/environment.rb':

require 'digest' 

Bây giờ bạn chỉ cần sử dụng những điều sau đây, nơi bạn muốn hiển thị gravatar của người dùng:

image_tag("http://www.gravatar.com/avatar.php?gravatar_id=#{Digest::MD5::hexdigest(@user.email)}", :alt => 'Avatar', :class => 'avatar') 

này không yêu cầu đá quý bổ sung và bạn có thể tạo ra một helper nếu cần nếu tất cả những gì bạn cần là kéo gravatar của người dùng.

13

Đặt mã này trong ApplicationHelper của bạn để gravatar_for khả dụng ở tất cả các chế độ xem.

def gravatar_for email, options = {} 
    options = {:alt => 'avatar', :class => 'avatar', :size => 80}.merge! options 
    id = Digest::MD5::hexdigest email.strip.downcase 
    url = 'http://www.gravatar.com/avatar/' + id + '.jpg?s=' + options[:size].to_s 
    options.delete :size 
    image_tag url, options 
end 

Trong lần xem:

<%= gravatar_for '[email protected]' %> 
<%= gravatar_for '[email protected]', :size => 48 %> 
<%= gravatar_for '[email protected]', :size => 32, :class => 'img-class', :alt => 'me' %> 

tôi tinh chế giải pháp nghiêng của. Sau Gravatar guidelines, các thư điện tử phải được cắt bớt và hạ thấp trước khi băm. Ngoài ra, có vẻ như require 'digest' không cần thiết (được kiểm tra trên Rails 3).

+0

làm cách nào để đặt d các loại gravatars khác (ví dụ như quái vật)? – Angela

+1

Nối '& d = DEFAULT_ICON_NAME' vào URL. Tôi sẽ sửa đổi mã của tôi vào thứ Hai khi tôi trở lại làm việc. Đối với tên biểu tượng, hãy xem http://gravatar.com/site/implement/images/ – Nowaker

+0

Killer! Cảm ơn! – Techism

1

Tôi sử dụng https://github.com/sinisterchipmunk/gravatar nó hoạt động tốt, tôi chỉ sử dụng kiến ​​thức cơ bản nhưng có thể thực hiện các tùy chọn tiền mặt và nâng cao.

Nó cũng là đơn giản để sử dụng:

Gravatar.new(email).image_url 

cho identicons bạn có thể thêm wavatar như sau

Gravatar.new(email).image_url + '?d=wavatar'