Pergunta

Estou tentando descobrir por que isso não funciona.

Digamos a você três modelos, usuário, foo e bar. Para que um bar seja criado, o usuário deve primeiro criar e validar um objeto 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

Estou tentando fazer um teste funcional funcionando, onde, se o usuário tentar fazer uma nova barra sem ter um Foo válido, será redirecionado para a ação "nova" para um Foo.

Não tive nenhum problema com o cenário de redirecionamento. No entanto, quando tento configurar um usuário com um objeto Foo válido e tento obter a ação "nova" para uma barra, ele ainda é redirecionado para a ação "nova" do controlador Foo. Ainda não reconhece que o usuário tem um foo.

Aqui está meu controlador:

 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

Esta é a função de redirecionamento que tenho no meu controlador de aplicativos chamado no meu controlador de barras:

  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

Aqui está a fábrica Foo:

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

Em vez disso, sou redirecionado para "https://test.host:80/foos/new"O controlador não reconhece que o usuário tem um foo ...

A sessão é válida, então isso parece um problema de fábrica, mas não tenho certeza do que é.

Foi útil?

Solução

Estou assumindo que este é Factory_Girl. Você está ligando Factory.build O que não economiza nada no banco de dados, para que você nunca tenha o valor da chave estrangeira necessária para sua associação. Mude -os para Factory.create E você deve ver a diferença.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top