Question

Je suis en train de comprendre pourquoi cela ne fonctionne pas.

Disons que vous trois modèles, l'utilisateur, Foo et Bar. Pour un bar à créer l'utilisateur doit d'abord créer et valider un objet 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

Je suis en train d'obtenir un test fonctionnel de travail où si l'utilisateur tente de faire un nouveau bar sans avoir une foo valide, ils sont redirigés vers l'action « nouveau » pour un Foo.

Je n'ai pas eu de problème avec le scénario de redirection. Cependant, lorsque je tente de configurer un utilisateur avec un objet Foo valide et essayer d'obtenir l'action « nouveau » pour une barre, il obtient toujours redirigé vers l'action « nouveau » du contrôleur Foo. Il ne reconnaît pas encore que l'utilisateur a un Foo.

Voici mon contrôleur:

 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

Ceci est la fonction de redirection que j'ai dans mon contrôleur d'application qui est appelé dans mon contrôleur de barre:

  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

Voici la Foo usine:

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

Au lieu de cela, je redirigés vers « https://test.host:80/foos/new » le contrôleur ne reconnaît pas que l'utilisateur a un Foo ...

La session est valide si cela semble être un problème d'usine, mais je ne suis pas sûr de ce qu'il est.

Était-ce utile?

La solution

Je suppose que cela est factory_girl. Vous appelez Factory.build qui ne sauve rien à la base de données, de sorte que vous n'avez la valeur de clé étrangère nécessaire pour votre association. Mettez ceux Factory.create et vous devriez voir une différence.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top