railscast 197如何:function add_fields

时间:2012-01-31 19:45:13

标签: ruby-on-rails javascript-events railscasts

我正在关注railscast 197但是我使用的是rails 3.1.3,jquery和scaffold,没有漂亮的:脚手架,一切正常,但是我无法添加字段,在那一集Ryan Bates为jquery提供了代码,但是不适合我,这是我的代码......提前谢谢。

javascript / application.js

中的

function remove_fields(link) {  
    $(link).prev("input[type=hidden]").val("1");  
    $(link).closest(".fields").hide();  
  }  

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));  
}

助手/ application_helper.rb

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

_questions_fields.html.rb

<div class="fields">  
  <p>  
    <%= f.label :content, "Pregunta" %>  
    <%= link_to_remove_fields "remover", f%><br />  
    <%= f.text_area :content, :rows => 3 %><br />  
  </p>  
  <p>
  <% f.fields_for :answers do |builder| %>  
    <%= render 'answer_fields', :f => builder %>  
  <% end %>  
  </p>
  <p><%= link_to_add_fields "Agregar respuesta", f, :answers %></p> 
</div> 

_form.html.rb

<%= form_for @asurvey do |f| %>    

    <%= f.label :name, "Nombre de encuesta" %><br />
    <%= f.text_field :name %>
  </p>
  <%= f.fields_for :questions do |builder| %> 
  <%= render 'question_fields', :f => builder %>
  <% end %>  
  <p><%= link_to_add_fields "Agregar pregunta", f, :questions %>
  <p><%= f.submit "Crear" %></p>  
<% end %> 

1 个答案:

答案 0 :(得分:0)

我找到了解决方案......在stackoverflow中这是:

link_to_function(name, h("add_fields(this, \"#{association}\", \"#escape_javascript(fields)}\")")) 

我的前任:

link_to_function(name, ("add_fields(this, #{association}', #{escape_javascript(fields)}')")) 

当然这个代码在helpers / application_helper.rb

是的,就是这样。现在它有效。感谢。