通过用户为我的帖子设置重力

时间:2013-11-14 15:09:26

标签: ruby-on-rails ruby

我只是设置它,以便当用户注册我的博客时,它会在用户索引中为他们提供一个gravatar。这工作正常,但我想这样做,以便当该用户发布帖子时,它将显示来自用户的gravatar。我刚刚通过迁移发布了一个user_id列。

这是我的架构的副本

ActiveRecord::Schema.define(version: 20131114141804) do

  create_table "comments", force: true do |t|
    t.text     "content"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.string   "post_id"
  end

  create_table "posts", force: true do |t|
    t.string   "title"
    t.text     "content"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.string   "user_id"
  end

  create_table "users", force: true do |t|
    t.string   "email"
    t.string   "password_digest"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.string   "auth_token"
    t.string   "password_reset_token"
    t.datetime "password_reset_sent_at"
    t.string   "avatar_url"
  end
end

模特:

用户:

class User < ActiveRecord::Base
  has_secure_password

  validates_uniqueness_of :email
  has_many :posts

  validates_presence_of :password, :on => :create
  before_create { generate_token(:auth_token) }

  def send_password_reset
    generate_token(:password_reset_token)
    self.password_reset_sent_at = Time.zone.now
    save!
    UserMailer.password_reset(self).deliver
  end

  def generate_token(column)
    begin
      self[column] = SecureRandom.urlsafe_base64
    end while User.exists?(column => self[column])
  end
end

发表:

class Post < ActiveRecord::Base
  belongs_to :user
  has_many :comments
end

class Comment < ActiveRecord::Base
  has_many :posts
end

application_helper.rb

module ApplicationHelper
  def avatar_url(user)
    gravatar_id = Digest::MD5::hexdigest(user.email).downcase
    "http://gravatar.com/avatar/#{gravatar_id}.png?s=200"
  end
end

试图做一些新事物,有人可以帮助我,或者指出我正确的方向吗?

2 个答案:

答案 0 :(得分:0)

我建议您仔细查看使用paperclip进行附件处理,而不是尝试重新发明轮子。 Paperclip的文档实际上以用户头像为例,因此它非常适合您的用例。

答案 1 :(得分:0)

您可能希望使用Rails插件与Gravatar集成,而不是自己动手: