Автоматически создавать вложенную форму модели с помощью помощника link_to_add_fields. - PullRequest
1 голос
/ 19 июля 2010

Я создал вложенную модель из примера RailsCasts Nested Model Form Part 2, и он работает с Rails 3 и JQuery.В настоящее время пользователь может создать новый проект и щелкнуть ссылку, чтобы добавить новые задачи, а внутри каждой новой задачи щелкнуть ссылку, которая позволит ему добавлять новые назначения для каждой задачи.Вот ссылка для создания новой задачи (ссылка для создания новых заданий аналогична):

        <p><%= link_to_add_fields "Add task", f, :task %></p>

Это относится к этому помощнику:

  def link_to_add_fields(name, f, association)
new_object = f.object.class.reflect_on_association(association).klass.new
fields = f.fields_for(association, new_object, :child_index => "new_#{association}") do |builder|
  render(association.to_s.singularize + "_fields", :f => builder)
end
link_to_function(name, h("add_fields(this, \"#{association}\", \"#{escape_javascript(fields)}\")"))end

Работает так: нажавссылка, HTML добавляется через JQuery, который отображает поле формы для имени задачи и ссылку, которая позволяет пользователю добавлять новые назначения для задачи.

Я хотел бы, чтобы рядом с полем имени задачи появлялись формы назначений, чтобы пользователю не нужно было щелкать дополнительную ссылку для добавления новых назначений в каждую задачу.Я могу сделать это, когда страница сначала загружается через контроллер проекта:

    1.times do
   task = @product.tasks.build
   1.times { task.assignments.build}
end

Однако, поскольку я использую JQuery для добавления и удаления HTML, контроллер не будет вызываться, а формы не будут создаватьсяпри «добавлении» новых задач.

Существует ли способ автоматически «строить» вложенные поля назначения (из части задачи) при создании поля новой задачи?

Вот мой частичный вариант для формы задачи, которая создается, когда пользователь нажимает ссылку «новая задача» в форме:

<div class = "fields">
<%= f.label :name, "Task name"%>
<%= link_to_remove_fields "remove", f %><br />
<%= f.text_field :name %>



<% f.fields_for :assignments do |builder| %>
    <%= render 'assignment_fields', :f => builder %>
<% end %>

<p><%= link_to_add_fields "Add assignments", f, :assignments %></p>

Ответы [ 2 ]

1 голос
/ 14 января 2011

У меня похожая ситуация, и я в настоящее время (как и вы) ищу решение. Из источника Rails 3 я нашел:

ActiveRecord / Библиотека / active_record / nested_attributes.rb:

# === One-to-many
#
# Consider a member that has a number of posts:
#
#   class Member < ActiveRecord::Base
#     has_many :posts
#     accepts_nested_attributes_for :posts
#   end
#
# You can now set or update attributes on an associated post model through
# the attribute hash.
#
# For each hash that does _not_ have an <tt>id</tt> key a new record will
# be instantiated, unless the hash also contains a <tt>_destroy</tt> key
# that evaluates to +true+.

Я надеюсь, что это дает вам идеи.

0 голосов
/ 18 апреля 2013

Вы можете смоделировать щелчок ссылки добавления назначений с помощью jQuery после создания формы задачи. Таким образом, вы вообще не зависите от контроллера rails.

after_create_handler = function() { $('assignment add link identifier').click() }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...