2

Railsを回避しようとしています。これは私の最初のRailsアプリであり、将来のプロジェクトの評価の過程でテストしています。私は第9章までrailstutorial.orgをフォローし、それから自分で行こうとしました。

Rails 3.2.3、Ruby 1.9.3、Factory Girl 1.4.0、およびrspec2.10.0を使用します。

私が抱えている問題は、クライアント-[has_many]->ユーザー関係にあります。

テストの実行時に解決できないエラー:

1) User 
     Failure/Error: let(:client) { FactoryGirl.create(:client) }
     NoMethodError:
       undefined method `user' for #<Client:0x000000045cbfa8>

spec / factorys.rb

FactoryGirl.define do
  factory :client do
    sequence(:company_name)  { |n| "Company #{n}" }
    sequence(:address) { |n| "#{n} Example Street"}   
    phone "0-123-456-7890"
  end

  factory :user do
    sequence(:name)  { |n| "Person #{n}" }
    sequence(:email) { |n| "person_#{n}@example.com"}   
    password "foobar"
    password_confirmation "foobar"
    client

    factory :admin do
      admin true
    end
  end

spec / models / user_spec.rb

require 'spec_helper'

describe User do

  let(:client) { FactoryGirl.create(:client) }
  before { @user = client.users.build(name: "Example User", 
                        email: "user@example.com", 
                        password: "foobar", 
                        password_confirmation: "foobar") }

  subject { @user }

  it { should respond_to(:name) }
end

app / controllers / clients_controller.rb

class ClientsController < ApplicationController
  def show
    @client = Client.find(params[:id])
  end

  def new
    @client = Client.new
    @client.users.build # Initializes an empty user to be used on new form
  end

  def create
    @client = Client.new(params[:client])
    if @client.save
      flash[:success] = "Welcome!"
      redirect_to @client
    else
      render 'new'
    end
  end
end

app / controllers / users_controller.rb

class UsersController < ApplicationController
  .
  .
  .

  def new
     @user = User.new
  end

  .
  .
  .
end

app / models / user.rb

class User < ActiveRecord::Base
  belongs_to :client

  .
  .
  .
end

app / models / client.rb

class Client < ActiveRecord::Base 
  has_many :users, dependent: :destroy
  .
  .
  .

end

助けてくれてありがとう!

4

1 に答える 1

2

呼び出しているuser_specclient.usersで、クライアントがユーザーに属しているように見えます(単数)。もしそうなら、次のようなことを試してください:

FactoryGirl.define do
  factory :client do
    ...
    association :user
  end
end

describe User do
   let(:user) { FactoryGirl( ... ) }
   let(:client) { FactoryGirl(:client, :user => user) }
   subject { user }
   it { should respond_to(:name) }
end
于 2012-06-08T12:51:35.597 に答える