首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使我的方法add_friend在rake :seed中工作

如何使我的方法add_friend在rake :seed中工作
EN

Stack Overflow用户
提问于 2012-11-28 06:32:25
回答 2查看 124关注 0票数 0

我在推特克隆人上学习查尔斯·马克斯·伍德的教程,飞人。当我启动rake:undefined method friendships时,我有一个错误的add_friend,我试图通过rake :add_friend任务添加好友,方法add_friend是在用户模型中定义的。但是,我需要帮助来定义方法友谊,这样任务就可以为您的帮助提供大量的.Thank。

这里是db/seeds.rb文件

代码语言:javascript
复制
require 'faker'
require 'populator'

User.destroy_all

10.times do
  user = User.new
  user.username = Faker::Internet.user_name
  user.email = Faker::Internet.email
  user.password = "test"
  user.password_confirmation = "test"
  user.save
end


User.all.each do |user|  
  Flit.populate(5..10) do |flit|
    flit.user_id = user.id
    flit.message = Faker::Lorem.sentence
  end

  3.times do
    User.add_friend(User.all[rand(User.count)])
  end
end

,这是用户文件.

代码语言:javascript
复制
class User < ActiveRecord::Base
  # new columns need to be added here to be writable through mass assignment
  attr_accessible :username, :email, :password, :password_confirmation

  attr_accessor :password
  before_save :prepare_password

  validates_presence_of :username
  validates_uniqueness_of :username, :email, :allow_blank => true
  validates_format_of :username, :with => /^[-\w\._@]+$/i, :allow_blank => true, :message => "should only contain letters, numbers, or .-_@"
  validates_format_of :email, :with => /^[-a-z0-9_+\.]+\@([-a-z0-9]+\.)+[a-z0-9]{2,4}$/i
  validates_presence_of :password, :on => :create
  validates_confirmation_of :password
  validates_length_of :password, :minimum => 4, :allow_blank => true

  has_many :flits, :dependent => :destroy

  has_many :friendships
  has_many :friends, :through => :friendships



  def self.add_friend(friend)
    friendship = friendships.build(:friend_id => friend.id)
      if !friendship.save
        logger.debug "User '#{friend.email}' already exists in the user's friendship list."
      end
  end

  # login can be either username or email address
  def self.authenticate(login, pass)
    user = find_by_username(login) || find_by_email(login)
    return user if user && user.password_hash == user.encrypt_password(pass)
  end

  def encrypt_password(pass)
    BCrypt::Engine.hash_secret(pass, password_salt)
  end

  private

  def prepare_password
    unless password.blank?
      self.password_salt = BCrypt::Engine.generate_salt
      self.password_hash = encrypt_password(password)
    end
  end
end

friendship.rb

代码语言:javascript
复制
class Friendship < ActiveRecord::Base
  attr_accessible :friend_id, :user_id

  belongs_to :user
  belongs_to :friend, :class_name => 'User'
  validates_uniqueness_of :friend_id, :scope => :user_id
  validates_presence_of :user_id, :friend_id
end
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-28 06:49:30

我认为您要做的是在实例user上调用user,而不是在类User上调用

代码语言:javascript
复制
3.times do
  user.add_friend(User.all[rand(User.count)])
end

另外,add_friend方法应该是实例方法,而不是类方法,因此不需要self

代码语言:javascript
复制
def add_friend(friend)
  friendship = friendships.build(:friend_id => friend.id)
    if !friendship.save
      logger.debug "User '#{friend.email}' already exists in the user's friendship list."
    end
end
票数 0
EN

Stack Overflow用户

发布于 2012-11-28 06:47:49

应该将此方法定义为类方法,而不是实例方法:

代码语言:javascript
复制
  def self.add_friend(friend)
    friendship = friendships.build(:friend_id => friend.id)
      if !friendship.save
        logger.debug "User '#{friend.email}' already exists in the user's friendship list."
      end
  end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13599152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档