2010-04-10 4 views
3

У меня есть форма рельсов с вложенной формой. Я использовал вложенную форму Ryan Bates с учебником jquery, и я отлично работаю над добавлением новых полей динамически.Rails Вложенные формы Атрибуты не сохраняются, если поля Добавлено с 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)); 
} 
+0

Все кажется очень похожим на пример railscast, единственное, что я вижу, это то, что ваша модель здесь не имеет «has_many: trip», но вы, вероятно, просто забыли добавить это к своему вопросу. – Corey

+0

Спасибо Кори, плохая копия и вставка, ассоциация def объявлена ​​в моем приложении. Не похоже, чтобы это понять. – looloobs

+0

Прошло почти год, поэтому я сомневаюсь, что вы все еще ищете решение, но первый шаг к отладке - это посмотреть на свой HTML для недавно добавленного ввода и проверить хэш параметров. Если HTML неверен, хэш будет неправильным, и ваша модель не будет обновляться. – SooDesuNe

ответ

0

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

+1

Или вы можете добавить свои вложенные атрибуты к своей родительской модели, например: attr_accessible: model_attributes – raidfive

4

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

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

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

+1

. ': Trip_attributes' в attr_accessible tip исправил проблему для меня сегодня, спасибо! – karmajunkie

2

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

validates_associated :parent_model 

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

Смежные вопросы