Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rails-字段和javascript,用于在表单中动态添加和删除字段(railscasts ep.196-197)_Javascript_Ruby On Rails_Railscasts_Fields For - Fatal编程技术网

Rails-字段和javascript,用于在表单中动态添加和删除字段(railscasts ep.196-197)

Rails-字段和javascript,用于在表单中动态添加和删除字段(railscasts ep.196-197),javascript,ruby-on-rails,railscasts,fields-for,Javascript,Ruby On Rails,Railscasts,Fields For,更新 谢谢你的回答 但如果我移除 for requested_role in @project.requested_roles 从部分,则无法访问请求的_role.role值,因为我没有从代码中获取的参数X for X in @projects.requested_roles 我不会写X角色 我如何访问此值而不使用for或.each来滚动项目的请求_角色 结束更新 我在用RubyonRails开发社交网络时遇到了一个问题。我遵循and创建了一个带有字段的表单,并使用javascript添

更新

谢谢你的回答

但如果我移除

for requested_role in @project.requested_roles
从部分,则无法访问请求的_role.role值,因为我没有从代码中获取的参数X

for X in @projects.requested_roles 
我不会写X角色

我如何访问此值而不使用for或.each来滚动项目的请求_角色

结束更新


我在用RubyonRails开发社交网络时遇到了一个问题。我遵循and创建了一个带有字段的表单,并使用javascript添加字段,但我有两个主要问题

用户可以创建项目,此项目必须具有1+个请求的\u角色。 当我打开项目编辑页面来更改角色时,如果项目有N个请求的_角色,我会看到N*N个表单来更改请求的_角色。因此,如果我有2个请求的_角色(例如导演和制片人),我会看到4个选择字段,导演-制片人-导演-制片人。它们被重复N次。我无法修改它们,因为每种类型最多可以有1个请求的_角色。如果我只有1个请求的_角色就可以了(因为1x1=1)

Project.rb

class Project < ActiveRecord::Base
attr_accessible :title, :requested_roles_attributes, :video, :num_followers, :num_likes

belongs_to :user

has_many :requested_roles, dependent: :destroy
accepts_nested_attributes_for :requested_roles, :reject_if => lambda { |a| a[:ruolo].blank? }, :allow_destroy => true
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));
}
我不明白出了什么问题。如果你有什么想法,你能给我一些建议吗?多谢各位


Dario

问题是您迭代了两次

<%= f.fields_for :requested_roles do |builder| %>
  ciao
  <%= render 'requested_role', :f => builder   %>
<% end %>
在你的部分。每次的
fields\u呈现它时,它只会重复所有请求的角色。下面是您的
edit.html.erb
中的代码应该是什么样子:

<% if @project.requested_roles.any? %>
  <p>Modifica ruoli richiesti </p>
<%end%>

<%= @project.requested_roles.count %>

<%= f.fields_for :requested_roles do |builder| %>
   <%= render 'requested_role', :f => builder   %>
<% end %>

<p><%= link_to_add_fields "Add requested role", f, :requested_roles %></p>
修复部分链接应该修复链接的第二个问题

您可能想考虑使用赖安的GEM用于<代码> NeestDyFrass< /代码>


听到这个消息我很高兴。如果我的回答确实是正确的,那就投赞成票或接受它吧;)我不能投票,因为名声不好,但我接受了
    <%= f.fields_for :requested_roles do |builder| %>
          ciao
         <%= render 'requested_role', :f => builder   %>
    <% end %>
<% if @project.requested_roles.any? %>
    <p>Modifica ruoli richiesti </p>
<%end%>
<%= @project.requested_roles.count %>
<% for requested_role in @project.requested_roles %>
    <div class="fields">

    <p>
    <p>Requested role: <%= role_to_string(requested_role.role) %></p>

    <%= f.label :role, "Modify role" %>
    <%= f.select :role, options_for_select([["Regista",1],["Sceneggiatore", 2],["Direttore della fotografia", 3], ["Operatore",4],
                                      ["Fonico", 5], ["Montatore", 6], ["Truccatrice",7], ["Costumista",8], ["VFX Artist",9],
                                      ["Produttore", 10], ["Attore",11], ["Attrice",12], ["Grip/Runner",13]], :selected => requested_role.role) %>


    <%= link_to_remove_fields "remove", f %>    #dinamically remove a field
    </p>

<% end %>

</div>
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, "add_fields(this, \"#{association}\", \"#{escape_javascript(fields)}\")")
end
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));
}
<%= f.fields_for :requested_roles do |builder| %>
  ciao
  <%= render 'requested_role', :f => builder   %>
<% end %>
for requested_role in @project.requested_roles
<% if @project.requested_roles.any? %>
  <p>Modifica ruoli richiesti </p>
<%end%>

<%= @project.requested_roles.count %>

<%= f.fields_for :requested_roles do |builder| %>
   <%= render 'requested_role', :f => builder   %>
<% end %>

<p><%= link_to_add_fields "Add requested role", f, :requested_roles %></p>
<div class="fields">
  <div>
    <p>Requested role: <%= role_to_string(f.object.role) %></p>

    <%= f.label :role, "Modify role" %>
    <%= f.select :role, options_for_select([["Regista",1],["Sceneggiatore", 2],["Direttore della fotografia", 3], ["Operatore",4],
                                  ["Fonico", 5], ["Montatore", 6], ["Truccatrice",7], ["Costumista",8], ["VFX Artist",9],
                                  ["Produttore", 10], ["Attore",11], ["Attrice",12], ["Grip/Runner",13]], :selected => f.object.role) %>


    <%= link_to_remove_fields "remove", f %>
  </div>
</div>