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

class のオブジェクトを作成していないようです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

Post モデルで実行しているself.user.profile場合、見つかったユーザーにはプロファイルが関連付けられていません。User クラスの FactoryGirl 定義内で関連付けをセットアップできるはずです。

于 2013-03-03T15:33:22.027 に答える