Domanda

Sto cercando di capire perché questo non funziona.

Diciamo che tre modelli, l'utente, Foo e Bar. Al fine di un bar per creare l'utente deve prima creare e validare un oggetto 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

Sto cercando di ottenere un test funzionale di lavoro in cui, se l'utente tenta di fare un nuovo bar senza avere un foo valida, ottengono reindirizzato all'azione "nuovo" per un Foo.

Non ho avuto alcun problema con lo scenario di reindirizzamento. Tuttavia, quando si tenta di impostare un utente con un oggetto Foo valida e cercare di ottenere l'azione "nuovo" per un bar, ancora viene rediretto all'azione "nuovo" del regolatore Foo. Si continua a non riconoscere che l'utente ha una Foo.

Ecco il mio controllo:

 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

Questa è la funzione di reindirizzamento che ho nel mio controller applicazione che si chiama nel mio controller bar:

  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

Ecco il Foo di fabbrica:

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

Invece vengo reindirizzato a " https://test.host:80/foos/new" il controller non riconoscere che l'utente ha un Foo ...

La sessione è valida quindi questo mi sembra un problema di fabbrica, ma non sono sicuro di cosa sia.

È stato utile?

Soluzione

sto supponendo che questo è factory_girl. Si chiama Factory.build che non salva nulla al database, in modo da non avere il valore di chiave esterna necessaria per la vostra associazione. Passare a quelli Factory.create e si dovrebbe vedere la differenza.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top