質問

私は、これは仕事をしない理由を把握しようとしている。

レッツは、次の3つのモデル、ユーザー、fooとbarを言います。ユーザーを作成するバーためには最初のfooオブジェクトを作成し、検証する必要があります。

Class User #snip!
has_many :foos
has_many :bars

Class Foo #snip!
belongs_to :user
has_many :bars

Class Bar #snip!
belongs_to :user
belongs_to :foo

私は、ユーザーが有効なのfooを持つことなく、新しいバーを作成しようとした場合、それらはFooのための「新」アクションにリダイレクト機能テスト作業を取得しようとしています。

私は、リダイレクトのシナリオに問題がなかったです。私はセットアップに有効なのFooオブジェクトをユーザーに試してみて、バーのための「新しい」アクションを取得しようとすると、しかし、それはまだフー・コントローラの「新」アクションにリダイレクトされます。それはまだユーザーがfooを持っていることを認識しません。

ここに私のコントローラがあります:

 class BarsControllerTest < ActionController::TestCase
  setup :activate_authlogic
  def setup
    @request.env['HTTPS'] = nil
    @user = Factory.build(:user)
    @foo = Factory.build(:foo, :user => @user)
  end
   test "should get new when user has a valid foo" do
     @request.env['HTTPS'] = 'on'
     UserSession.create(@user)
     get :new
     assert_response :success
  end

これは私が私のバーのコントローラに呼ばれている自分のアプリケーションのコントローラを持っているリダイレクト機能であります

  def foo_required
    if current_user && @current_user.foos.valid.empty? && @current_user.foos.empty?
    flash[:notice] = "You must have a verified foo in order to create a Bar!"
    redirect_to new_foo_path
    elsif current_user && @current_user.foos.valid.empty?
    flash[:notice] = "You must verify your foos in order to create a Bar!"
    redirect_to foos_path
    end
 end

ここではFoo工場があります:

Factory.define :foo do |f|
   #attributes
   f.valid true
   f.association :user
end

の代わりに私は https://test.host:80/foos/new」コントローラは、ユーザは、AはFoo ...

があることを認めていません

セッションはこれが工場出荷時の問題のように思えるので有効ですが、私はそれが何であるかわからない。

役に立ちましたか?

解決

私は、これはfactory_girlであると仮定しています。あなたが関連するために必要な外部キーの値を持つことがないようにするには、データベースには何も保存しませんFactory.buildを呼んでいます。 Factory.createにそれらを切り替えて、あなたは違いを確認する必要があります。

scroll top