- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我得到了一个非常简单的模型,其中设置了嵌套属性:
class Property < ActiveRecord::Base
has_many :trees
accepts_nested_attributes for :trees
end
然后我在我的 Controller 中构建它们:
class PropertiesController < ApplicationController
def new
@property = Properties.new
@trees = @property.trees.build
end
end
然后在我看来(使用 slim):
= form_for @property |p|
= p.text_field :name
.tree
= p.fields_for :trees do |t|
= t.text_field :fruit
= t.select :quantity, (1..1000).to_a
= link_to 'Add Another Tree', new_properties_path, id: 'new-tree'
然后在我的 js (coffeescript) 文件中,绑定(bind)到 '#new-tree' anchor 的点击事件:
event.preventDefault()
tree = $(event.target).parents('.tree')
tree.after tree.clone(true)
正如您所期望的那样工作,但是当我提交表单时,只有最后一个树参数被提交。这是因为在 form_for 生成的 html 中,我得到如下内容:
<input type="text" id="property_trees_attributes_0_fruit" name="property[trees_attributes][0][fruit]">
<select id="property_trees_attributes_0_quantity" name="property[trees_attributes][0][quantity]" class="valid">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
...
</select>
当我克隆这个 html 时,我得到了其中包含 0
的名称和 ID,尽管我认为它应该是一个 1
来添加额外的树参数等.
我试图通过做这样的事情来补偿 js:
event.preventDefault()
tree = $(event.target).parents('.tree')
clone = tree.clone()
number = parseInt(clone.find('input[type=text]').attr('id').match /[0-9]/)
next = number + 1
clone = clone.html().replace /_(#{number})_|\[(#{number})\]/, next
section.after clone
正则表达式的要点是替换两个下划线或两个括号之间的任何数字,例如 _0_
或 [0]
不过我的正则表达式似乎不起作用。它将 _0_
替换为 1
并且这个解决方案对我来说似乎很乱。我会让正则表达式更简单,但是我不得不担心它会改变选择菜单选项的值。
有什么清理建议吗?我是否漏掉了一些非常明显的东西?
最佳答案
你遇到的问题是你只是在复制 DOM 元素 - 这是 IMO 的 hack,因为你没有预先构建你需要的对象(不会持久化数据等)
我们之前使用 Ajax 实现了“向 f.fields_for
添加额外字段”- 有一个 great tutorial here和一个 RailsCast here
child_index
你的问题的答案是使用 fields_for
帮助程序中的 child_index
选项,并使用 integer
时间戳:
<% index = Time.now.to_i %>
<%= f.fields_for :trees, child_index: index do |fields| %>
#your fields here
<% end %>
代码
这是我们的工作:
#app/views/properties/new.html.erb
<%= form_for @property do |f| %>
<%= render partial: "trees_fields", locals: { f: f, child_index: Time.now.to_i } %>
<%= link_to "New Field", new_field_property_path %>
<% end %>
#app/views/properties/_trees_fields.html.erb
<%= f.fields_for :trees, child_index: child_index do |trees| %>
<%= trees.text_field :your_attr %>
<% end %>
#app/controllers/properties_controller.rb
def new_field
@property = Property.new
@property.trees.build
render "add_tree", layout: false
end
#app/views/properties/add_tree.html.erb
<%= form_for @property do |f| %>
<%= render partial: "trees_fields", locals: {f: f, child_index: Time.now.to_i} %>
<% end %>
#app/assets/javascripts/application.js.coffee
$ ->
$(document).on "click", "#add_tree", (e) ->
e.preventDefault();
$.ajax
url: '/messages/add_subscriber'
success: (data) ->
el_to_add = $(data).html()
$('#trees_form').append(el_to_add)
error: (data) ->
alert "Sorry, There Was An Error!"
关于javascript - Rails 嵌套属性 form_for for has_many 使用 javascript 无限嵌套模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22296671/
我有一个具有以下模型的应用程序:- 类别- 子类别- 产品- 产品子类别 我的关系如下: Category has_many :subcategories Subcategory belongs_to
看来 rails 仍然不支持这种类型的关系并抛出 ActiveRecord::HasManyThroughAssociationPolymorphicThroughError 错误。 我该怎么做才能实
我想知道我可以在多大程度上使用 Rails 中的关联。考虑以下因素: class User :provider end class Provider :businesses belongs
我是 Rails 的新手。我想知道我是否需要将 add_index 添加到两个迁移? 我正在尝试定义用户和事件。每个用户可以有多个事件,每个事件可以有多个用户。所以我会做这样的事情: class Us
我有这个: class User :series end class Serial :serials end class Episode < ActiveRecord::Base belong
我一直致力于一个大量使用模型关联的项目,似乎我发现了 has_many 或 has_one through 功能与 :conditions 功能冲突的情况。简而言之,问题是 through 关联为 h
模拟以下情况的最佳方法是什么: Word belongs_to :wordable, :polymorphic => true Phrase has_many :words, :as => :
这似乎是一个典型的问题,但很难搜索。 我想选择用户通过 has_many 拥有的项目和用户通过 has_many through 关联的项目。 考虑以下模型: class User < ActiveR
首先对英语感到抱歉 所以我已经有了“用户 - 帖子”一对多关联,这意味着每个帖子只能有一个作者,现在我想在用户个人资料中添加“最喜欢的帖子”按钮,以及“添加到收藏夹”按钮每个帖子,所以问题是如何实现这
我有一个用户模型,允许用户关注其他用户。每个用户也有很多东西: class User has_many :following, :class_name => 'Followings', :fore
我正在使用 Rails 4.1 和 Ruby 2.1。 一个用户 has_many 辆车,和一辆车 has_many 约会。获取所有用户约会的最简单方法是什么? 理想情况下,我想做这样的事情:user
我想为 has_many/has_many 关系定义一个工厂(我想我做对了)但是我不知道如何为这些创建的工厂的每个对象定义属性。 这是主页,这是交易卡片的列表 我们假设下面的主页 View 是针对登录
我正在努力弄清楚如何实现这个计数。模型是用户、测试、等级 用户 has_many 测试,测试 has_many 成绩。 每个等级都有一个计算分数(strong_pass、pass、fail、stron
我有一个 has many through 关系来定义用户已回答的问题。 如何为用户创建的问题建立关系? 通常你会在用户和问题之间创建一个 has_many 和 belongs_to 关系,但是因为我
例如,在 class Student < ActiveRecord::Base has_many :awards end class Awards < ActiveRecord::Base b
我仍然在尝试如何处理在Ecto中创建/更新has_many, through:关联。我已经重新阅读了José's关于关联以及the docs的帖子,但我仍在努力。 我所拥有的是: 网站/模型/dish
# == Schema Information # # Table name: orders # # id :integer not null, pri
我正在尝试从 EventView.promoter_id = User.id 的用户获取事件,但它无法正常工作。这是我的设置(目前不正确): User has_many :events has_man
我有三门课 TeamMember , Service和ServiceTeamMember 我有 class Service has_many :service_team_members has
我需要列出所有用户及其销售的产品总量及其电子邮件和产品总量, class User :user).group('users.email').sum(:quantity) 关于mysql - 事件记录
我是一名优秀的程序员,十分优秀!