Атрибуты вложенных форм Rails не сохраняются, если поля добавлены с помощью jQuery - PullRequest
3 голосов
/ 10 апреля 2010

У меня есть форма рельсов с вложенной формой. Я использовал вложенную форму Райана Бейтса с обучающей программой jquery, и у меня она отлично работает, если добавлять новые поля динамически.

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

Любая помощь будет отличной.

class Itinerary < ActiveRecord::Base
  accepts_nested_attributes_for :trips
end

Маршрут / new.html

<% form_for ([@move, @itinerary]), :html => {:class => "new_trip" } do |f| %>

  <%= f.error_messages %>
  <%= f.hidden_field :move_id, :value => @move.id %>
  <% f.fields_for :trips do |builder| %>
    <%= render "trip", :f => builder %>
  <% end %>
<%= link_to_add_fields "Add Another Leg to Your Trip", f, :trips %>

<p><%= f.submit "Submit" %></p>

<% end %>

application_helper.rb

 def link_to_remove_fields(name, f)
  f.hidden_field(:_destroy) + link_to_function(name, "remove_fields(this)")
 end

 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, :f => builder)
  end
  link_to_function(name, h("add_fields(this, \"#{association}\", \"#{escape_javascript(fields)}\")"))
 end

application.js

function add_fields(link, association, content) {
var new_id = new Date().getTime();
var regexp = new RegExp("new_" + association, "g")
$(link).parent().before(content.replace(regexp, new_id));
}

Ответы [ 3 ]

4 голосов
/ 21 июня 2010

Вы пробовали добавить:

class Itinerary < ActiveRecord::Base
  attr_accessible :move_id, :trips_attributes
  accepts_nested_attributes_for :trips
end

Конечно, вам нужно будет также добавить поля для вашей модели маршрута. Не зная их, я бы догадался, кто они.

2 голосов
/ 24 июля 2011

У меня была точно такая же проблема, как и у вас. Я исправил это, убрав строку

validates_associated :parent_model

от вложенной модели (в вашем случае модель Trip).

0 голосов
/ 02 мая 2010

У меня была похожая проблема. Удаление строки attr_accessible из родительской модели помогло мне. Я вижу, что ваша Itenerary модель уже лишена этой линии, так что это может вам не помочь; но может помочь кому-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...