Pregunta

Tengo un modelo de propuesta que pertenece al proyecto:

class Proposal < ActiveRecord::Base
  belongs_to :project
  has_many :articles, :as => :document, :dependent => :destroy
  has_many :sections, :through => :articles

  # proposal has project - test/unit/proposal_test.rb
  validates_presence_of :project_id
end

La ruta que configuré para mostrar este disco es "http: //domain.tld/projects/project-id/proposal", a través de esta línea en rutas.rb -" map.resources: proyectos ,: has_one =>: propuesta "

Ahora quiero probar esto a través de propuestas_controller_test.rb.

  test "should show proposal" do
    get :show, :id => proposals(:one).to_param
    assert_response :success
  end

Sin embargo, la "prueba de rastrillo" sigue diciéndome esto, y no tengo idea de cómo solucionarlo. Probablemente sea realmente fácil para ustedes, pero nuevos para mí.

  1) Error:
test_should_show_proposal(ProposalsControllerTest):
ActiveRecord::RecordNotFound: Couldn't find Project without an ID
    app/controllers/proposals_controller.rb:18:in `show'
    /test/functional/proposals_controller_test.rb:34:in `test_should_show_proposal'

Aquí está mi lógica de show de controlador:

  # should show proposal - test/functional/proposals_controller_test.rb
  def show
    @project = Project.find(params[:project_id])
    @proposal = @project.proposal

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @proposal }
    end
  end

Un viaje rápido a "Script/Consola" rendimiento:

Loading development environment (Rails 2.3.4)
>> t = Project.first
=> #<Project id: 1, name: "Test">
>> t.proposal
=> #<Proposal id: 2, active: true, project_id: 1>

Mientras que la "prueba de script/consola" muestra:

Loading test environment (Rails 2.3.4)
>> t = Project.first
=> #<Project id: 298486374, name: "Test">
>> t.proposal
=> nil

¿Qué pasa con esa idiota loca?!?! ¡Ayúdame a conectar asociaciones en la prueba env!

¿Fue útil?

Solución

Esto es lo que estaba mal.

Asociaciones automáticas en accesorios Ruby on Rails

http://ar.rubyonrails.org/classes/fixtures.html

  • Consulte la sección sobre "Referencias de etiqueta para asociaciones (pertenencias_to, has_one, has_many)"

Aquí está otro Explicación opcional...


Esencialmente, debe montar con sus accesorios algunos y eliminar el _id de las claves extranjeras para que las asociaciones funcionen (por extraño que parezca). Los artículos lo explican todo. Después de rtfm, todo comenzó a funcionar perfectamente. Solo necesitaba saber dónde mirar. ¡No olvides "Rastrar DB: Test: Prepare" y "Prueba de rastrillo" primero!

Otros consejos

Primero noté que la cosa es que su controlador está utilizando el param 'Project_ID' y su prueba está pasando un parámetro de 'ID'. Por lo tanto, su llamada de búsqueda buscará con 'nulo' en el controlador, lo que probablemente causará el error que vea.

Params es solo un hash, y en realidad puede pasar el hash Params en su llamada de espectáculo. Si desea que haya un valor para un campo 'Project_ID', puede agregarlo fácilmente. por ejemplo:

get :show, { :project_id => proposals(:one).project_id }

Pruebe algo en ese sentido y debería poder obtener el Project_ID correcto al controlador. Rails debe saber que el hash que se está pasando al final es el hash de Params y lo creará para sus controladores en consecuencia.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top