fields_for не рендеринг - рельсы 3

Наконец перешел на Rails 3 для нового проекта и уже столкнулся с проблемой новичка.

Пытаюсь сделать простую вложенную форму.

2 модели: список и задачи

Модель списка

class List < ActiveRecord::Base
  has_many :tasks, :dependent=>:destroy
  accepts_nested_attributes_for :tasks, :reject_if => lambda { |a| a[:name].blank? }
end

Модель задачи

class Task < ActiveRecord::Base
  belongs_to :list

end

Контроллер списка

def new
   @list = List.new
   3.times{ @list.tasks.build }
end

списки/new.html.erb

<% form_for :list, :url=>{:action=>"create"} do |f| %>
    <%= f.text_field :name, :class=>'big' %>
    <%= f.label :name, "ex: Today's Todos, Christmas List" %>

    <% f.fields_for :tasks do |builder| %>
        <p>
            <%= builder.label :name, "Task" %>
            <%= builder.text_field :name %>
            <%= builder.check_box :_destroy %>
        </p>
    <% end %>

    <p><%= submit_tag "Create List", :id => "submit", :name => "submit", :class => "form_submit", :disabled => false, :disable_with => "Please wait..." %></p>

<% end -%>

Используя debug @list, я вижу 3 задачи, созданные в моем контроллере, но fields_for не отображается.

Любые идеи?


person Ryan    schedule 11.12.2010    source источник


Ответы (2)


В rails 3 вы должны использовать <%= вместо <% для form_for и fields_for . Посмотрите, поможет ли это.

person bowsersenior    schedule 11.12.2010
comment
Это устранило эту проблему ... теперь отображается только 1 из 3 текстовых полей задачи ... есть идеи? - person Ryan; 11.12.2010
comment
Нм... понял. Я не использовал переменную экземпляра, которую я создал в form_for - person Ryan; 11.12.2010
comment
Круто, рад, что вы решили проблемы. Вы можете взглянуть на github.com/plataformatec/simple_form или github.com/justinfrench/formtastic в будущем, чтобы упростить работу с формами rails. - person bowsersenior; 11.12.2010
comment
ОК, попробуйте это на рельсах 2.3.5: return content_tag('li', render_single_menu_node(node, content_tag(:span, caption), url, selected), {}, false) - person bowsersenior; 11.12.2010
comment
Я тебя люблю! Три дня исследований, и никаких решений не найдено. Кроме этого! - person marzapower; 12.11.2011
comment
@marzapower Я рад, что это помогло вам! - person bowsersenior; 15.11.2011
comment
Почему вам нужно использовать ‹%= вместо ‹%? - person Huey; 01.03.2012
comment
@Huey помощники выводят видимый контент, поэтому имеет смысл использовать <%=, но в Rails 2 вам пришлось использовать <% . - person bowsersenior; 01.03.2012
comment
Тьфу, так много в Интернете все еще устаревшей информации о fields_for, и так легко пропустить чтение документации по API. Ужасная маленькая проблема! Большое спасибо за ответ. - person Dave; 02.03.2012
comment
Это спасло меня от выдергивания нескольких волосков с моей и без того лысой головы! - person DGM; 23.05.2012

В вашем контроллере списка в действии вы должны добавить

 def new
   @list = List.new
   3.times{ 
   @tasks = @list.tasks.build
   }
end
person priyanka Ukirde    schedule 12.06.2013