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>