Pregunta

Dado el código del Forma compleja parte III ¿Cómo harías para probar el atributo virtual?

  def new_task_attributes=(task_attributes)
    task_attributes.each do |attributes|
      tasks.build(attributes)
    end
  end

Actualmente estoy intentando probarlo así:

  def test_adding_task_to_project
    p = Project.new
    params = {"new_tasks_attributes" => [{ "name" => "paint fence"}]}
    p.new_tasks_attributes=(params)
    p.save
    assert p.tasks.length == 1
  end

Pero recibo el siguiente error:

Ningún error de método:Método indefinido `stringify_keys! ' para "new_tasks_attributes": cadena

Cualquier sugerencia para mejorar esta prueba será muy apreciada.

¿Fue útil?

Solución

Parece que new_task_attributes= espera una serie de hashes, pero le estás pasando un hash.Prueba esto:

def test_adding_task_to_project
  p = Project.new
  new_tasks_attributes = [{ "name" => "paint fence"}]
  p.new_tasks_attributes = (new_tasks_attributes)
  p.save
  assert p.tasks.length == 1
end

Otros consejos

¿Podemos ver el seguimiento completo de la pila?¿Dónde piensa String#stringify_keys!esta siendo llamado?

Además, los parámetros me parecen extraños.¿Tareas.build() espera una entrada como esta? ["new_tasks_attribute", {"name" => "paint fence"}] ?

Si no es así, ¿quizás realmente quieras Hash#each_key() en lugar de Hash#each()?

Necesita más datos.Además, podría considerar una etiqueta Ruby para acompañar su etiqueta Rails.

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