Pergunta

Eu estou tentando implementar formas de objetos aninhados para o meu site, usando post do Ryan Daigle como um guia ( http://ryandaigle.com/articles/2009/2/1/what-s-new-in-edge-rails-nested-attributes ). Por alguma razão, os campos do formulário aninhados não aparecem na vista.

class Instruction < ActiveRecord::Base
  has_many :steps
  accepts_nested_attributes_for :steps
end

class Step < ActiveRecord::Base
  belongs_to :instruction
end

<% form_for @instruction do |instruction_form| %>
  <%= instruction_form.error_messages %>
  <p>
    <%= instruction_form.label :title %><br />
    <%= instruction_form.text_field :title %>
  </p>
  <p>
    <%= instruction_form.label :difficulty %><br />
    <%= instruction_form.text_field :difficulty %>
  </p>

<% instruction_form.fields_for :steps do |step_form| %>
    <%= step_form.label :explanation, 'Explanation: ' %>
    <%= step_form.text_field :explanation %>

<% end %>

  <p><%= instruction_form.submit "Submit" %></p>
<% end %>

Quando eu mudar instruction_form.fields_for :steps do |step_form| para instruction_form.fields_for :step do |step_form|, a forma torna mas mediante a apresentação, eu recebo um 'atributo desconhecido: passo'. Erro

O que estou fazendo parece coincidir com o tutorial. O que devo verificar? Obrigado.

Foi útil?

Solução

O que está acontecendo em seu controlador? Eu não li o tutorial ainda, e parece que não consegue puxá-lo até agora (para baixo?) Mas você está construindo um objeto na memória para preencher?

em seu controlador, em sua ação de "novo", certifique-se de que você está

@instruction = Instruction.new
@instruction.steps.build

Isto irá instanciar um Step na memória como um "espaço reservado" para o seu formulário para preencher. . . pelo menos é o que eu faço no meu próprio controlador ao usar um accepts_nested_attributes_for, e ele funciona muito bem.

Deixe-me saber se ele funciona, e uma vez eu posso puxar para cima o tutorial eu possa ter de editar este

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