Код Javascript просто создает HTML-распечатку, не может ее отобразить - PullRequest
1 голос
/ 13 сентября 2011

Я новичок в RoR и слежу за этим railscast , который объясняет, как удалять и добавлять элементы во вложенных формах. В моем случае я пытаюсь разрешить пользователям добавлять / удалять «товары» из списка покупок. К сожалению, однако, когда я нажимаю «добавить элемент» в моем браузере, HTML-код распечатывается, а не отображается. Вот что он выводит:

<div class ="fields"> Quantity: <input id="list_items_attributes_1315942810959_quantity" name="list[items_attributes][1315942810959][quantity]" size="7" type="text" /> Name: <input id="list_items_attributes_1315942810959_name" name="list[items_attributes][1315942810959][name]" size="30" type="text" /> Category: <select id="list_items_attributes_1315942810959_category" name="list[items_attributes][1315942810959][category]"><option value="Produce">Produce</option> <option value="Dairy">Dairy</option></select> <p><input id="list_items_attributes_1315942810959__destroy" name="list[items_attributes][1315942810959][_destroy]" type="hidden" value="false" /><a href="#" onclick="remove_fields(this); return false;">remove</a></p> </div>
Add Item

Я чувствую, что упускаю что-то простое. Есть ли какой-нибудь переключатель, который я могу включить, чтобы заставить его рендериться? Спасибо!


Если это полезно, вот мой список моделей:

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

  belongs_to :user

end

Вот моя краткая форма для добавления элементов в список:

<%= form_for @list do |f| %>
<p>
    <%= f.label :date %>
    <%= f.date_select :date %>
</p>
    <%= f.fields_for :items do |builder|%>
        <%= render "item_fields", :f => builder %>
    <% end %>
<p><%= link_to_add_fields "Add Item", f, :items %></p>  
<%= submit_tag "Create List" %>
<% end %>

Вот мой метод link_to_add_fields в моем помощнике приложения (это дословная копия из railscast):

  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

И, наконец, вот моя функция add_fields в моем файле application.js:

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