0

我正在尝试让它工作。我进行了适当的关联,但仍然失败。看看我的代码。

post.rb

class Post < ActiveRecord::Base
  belongs_to :user
  attr_accessible :content

  before_create :format_content

  validates :content, presence:true, length: {minimum:21}

  def format_content
    profil = self.user.profile
    if profil.gender == "Mężczyzna"
      "Wiadomość od spottera: #{self.content}"
    elsif profil.gender == "Kobieta"
      "Wiadomość od spotterki: #{self.content}"
    end
  end
end

post_spec.rb

describe "Properly formats content" do
    let(:user) {FactoryGirl.create(:user)}
    let!(:poscik) {FactoryGirl.create(:post) }
    before(:each) {user.create_profile!(gender: "Kobieta", email: "donatella@dostojnie.pl")}

rspec_failures

Post creation valid should have content Failure/Error: poscik = user.posts.create(content: "Weird #{"a"*25}") NoMethodError: undefined method `gender' for nil:NilClass

如何正确访问模型中的其他类以及为什么找不到我的方法?我了解错误消息 - 它说我的配置文件类未定义


用户工厂

FactoryGirl.define do
  factory :user do
    sequence(:email) {|i|"maestro#{i}@dot.pl"}
    password "kravmaga1290"
    association :profile, factory: :profile, strategy: :build
  end
end
4

2 回答 2

1

看来您还没有创建一个类的对象Profile。我认为这是在抱怨你打电话来获取 profile.gender 的 nil 类。

尝试在工厂中添加如下内容:

Factory.define :user do |f|
  f.after_build do |user|
    user.profile ||= Factory.build(:profile, :user => user)
  end
end

当然,您还必须定义配置文件工厂。让我知道这是否有帮助

于 2013-03-03T15:50:39.357 回答
0

当您self.user.profile在 Post 模型中执行操作时,它找到的用户没有与之关联的配置文件。您应该能够在您的 FactoryGirl 定义中为 User 类设置关联。

于 2013-03-03T15:33:22.027 回答