我试图找出为什么这个是行不通的。

让我们说你三种模式,用户,Foo和酒吧。为了要创建的条用户必须首先创建和验证一个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。

这是我的控制器:

 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

这是重定向函数I具有其中被称为我的栏控制器我的应用程序的控制器:

  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

这里的富工厂:

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

相反,我重定向到“ https://test.host:80/foos/new”控制器不承认用户具有一个Foo ...

在会话有效,因此这似乎是一个工厂的问题,但我不知道它是什么。

有帮助吗?

解决方案

我假定这是factory_girl。你调用Factory.build它不保存任何东西到数据库中,所以你从来没有需要为您的关联外键的值。切换那些Factory.create,你应该看到一个区别。

scroll top