- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我尝试做一些类似 google my business 的事情,在那里你有星期几,你可以添加多次。我关注rail cast nested model form ,但我无法让它按照我想要的方式工作。
我想要一个包含一周 7 天的位置,您可以在每一天添加多个时间。 Create 方法似乎按预期工作,因为表单是从头开始的。然后当我进入编辑时,每天都有创建时保存的所有时间。
我只想在这个问题上得到一些指导。谢谢!
_from.html.erb
<% (0..6).each do |idx| %>
<div class="row">
<div class="col-md-2">
<p><% I18n.t('date.day_names')[idx] %></p>
</div>
<div class="col-md-5">
<%= form.fields_for :times do |f| %>
<%= render "time_fields", :form => f %>
<% end %>
</div>
<div class="col-md-3">
<%= link_to_add_fields "Add Time", "btn", "repeater-add", form, :times %>
</div>
</div>
<% end %>
_time_fields.html.erb
<div class="weekday-time" id="time">
<%= form.hidden_field :weekday_id, value: form.options[:child_index] %>
<div class="col-md-9">
<div class="input-group bootstrap-timepicker timepicker">
<%= form.text_field :time, id: "timepicker" %>
<span class="input-group-addon"><i class="glyphicon glyphicon-time"></i></span>
</div>
<div class="col-md-3">
<%= link_to_remove_fields "Delete Time, "btn", "repeater-remove", form %>
</div>
</div>
</div>
Controller
def new
@location = Location.new
@location.times.build
end
模型
class Time < ApplicationRecord
belongs_to :location, optional: true
end
class Location < ApplicationRecord
has_many :times, dependent: :destroy
accepts_nested_attributes_for :times
end
编辑
在尝试了不同的事情之后,我得到了我想要的结果。但是,不确定这是否是最好的方法。
application_helper.rb
module ApplicationHelper
def link_to_remove_fields(name, html_class, data_attr, html_id, form)
form.hidden_field(:_destroy) + link_to_function(name, html_class, html_id, data_attr, "remove_fields(this)")
end
def link_to_add_fields(name, html_class, html_id, data_attr, form, association, idx)
new_object = form.object.class.reflect_on_association(association).klass.new
fields = form.fields_for(association, new_object, :child_index => "new_#{association}") do |builder|
render(association.to_s.singularize + "_fields", :form => builder, idx: idx)
end
link_to_function(name, html_class, html_id, data_attr, "add_fields(this, \"#{association}\", \"#{escape_javascript(fields)}\")")
end
def link_to_function(name, html_class, html_id, data_attr, *args, &block)
html_options = args.extract_options!.symbolize_keys
function = block_given? ? update_page(&block) : args[0] || ''
onclick = "#{"#{html_options[:onclick]}; " if html_options[:onclick]}#{function}; return false;"
href = html_options[:href] || '#'
content_tag(:a, name, html_options.merge(:href => href, :onclick => onclick, :class => html_class, :id => html_id, :data_attr => data_attr))
end
end
location_controller.rb
def new
@location = Location.new
end
def edit
@times = Times.where(location_id: @location.id)
end
_time_fields.html.erb
<div class="weekday-time" id="time">
<%= form.hidden_field :weekday_id, value: idx %>
<div class="col-md-9">
<div class="input-group bootstrap-timepicker timepicker">
<%= form.text_field :time, id: "timepicker" %>
<span class="input-group-addon"><i class="glyphicon glyphicon-time"></i></span>
</div>
</div>
<div class="col-md-3">
<%= link_to_remove_fields "Delete Time, "btn", "plahecolder", "repeater-remove", form %>
</div>
</div>
_form.html.erb
<% (0..6).each do |idx| %>
<div class="row">
<div class="col-md-2">
<p><%= I18n.t('date.day_names')[idx] %></p>
</div>
<div class="col-md-5">
<div id="time<%= idx %>">
<% _current_time = @location.new_record? ? @location.times.build : @times.where(location_id: idx) %>
<% unless _current_time.blank? %>
<%= form.fields_for :times, _current_time do |f| %>
<%= render "time_fields", :form => f, :idx => idx %>
<% end %>
<% end %>
</div>
</div>
<!-- add button -->
<div class="col-md-3">
<%= link_to_add_fields "Add Time", "btn", "repeater-add", "time#{idx}", form, :times, idx %>
</div>
</div>
<% end %>
js
function remove_fields(link) {
$(link).prev("input[type=hidden]").val("true");
$(link).closest(".weekday-time").hide();
}
function add_fields(link, association, content) {
let _attr = $(link).attr('data_attr');
var new_id = new Date().getTime();
var regexp = new RegExp("new_" + association, "g");
$(content.replace(regexp, new_id)).insertAfter($("#" + _attr));
}
最佳答案
我认为可能还有另一种方法可以做到这一点。如果是这样,请毫不犹豫地指出并回答这个问题。但是,如果有人正在寻找具有类似问题的解决方案,这就是我所做的。
我遍历星期几,然后在 create
上,_current_time
将返回 true
,它可以用作 record_object 参数对于 fields_for
。它需要一个 record_object
但我在 create
上没有,所以 true
就足够了(不确定 100% 为什么)。然后在 update
上,我遍历有星期几的时间并跳过没有的字段的创建。
_form.html.erb
<% (0..6).each do |idx| %>
<div class="row">
<div class="col-md-2">
<p><%= I18n.t('date.day_names')[idx] %></p>
</div>
<div class="col-md-5">
<div id="time<%= idx %>">
<% _current_time = @location.new_record? ? @location.times.build : @times.where(location_id: idx) %>
<% unless _current_time.blank? %>
<%= form.fields_for :times, _current_time do |f| %>
<%= render "time_fields", :form => f, :idx => idx %>
<% end %>
<% end %>
</div>
</div>
<div class="col-md-3">
<%= link_to_add_fields "Add Time", "btn", "repeater-add", "time#{idx}", form, :times, idx %>
</div>
</div>
<% end %>
添加按钮将在任一情况下使用星期几的适当索引创建新时间。在这个问题的编辑部分,您可以看到完整的实现。只有 _form.html.erb
导致了这个问题,所以我只发布这篇文章作为答案。
关于ruby-on-rails - 以 rails 形式在循环内嵌套属性的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50568810/
在有些场景下,我们需要对我们的varchar类型的字段做修改,而修改的结果为两个字段的拼接或者一个字段+字符串的拼接。 如下所示,我们希望将xx_role表中的name修改为name+id。
SELECT incMonth as Month, SUM( IF(item_type IN('typ1', 'typ2') AND incMonth = Month, 1, 0 ) )AS
我最近读到 volatile 字段是线程安全的,因为 When we use volatile keyword with a variable, all the threads read its va
我在一些模型中添加了一个 UUID 字段,然后使用 South 进行了迁移。我创建的任何新对象都正确填充了 UUID 字段。但是,我所有旧数据的 UUID 字段为空。 有没有办法为现有数据填充 UUI
刚刚将我的网站从 mysql_ 更新为 mysqli,并破坏了之前正常运行的查询。 我试图从旋转中提取 id,因为它每次都会增加 1,但我不断获取玩家 id,有人可以告诉我我做错了什么吗?我尝试了将
我在 Mac OS X 上使用带有 Sequel Pro 的 MySQL。我想将一个表中的一个字段(即名为“GAME_DY”的列)复制到另一个名为“DAY_ID”的表的空字段中。两个表都是同一数据库的
问题: 是否有可能有一个字段被 JPA 保留但被序列化跳过? 可以实现相反的效果(JPA 跳过字段而序列化则不会),如果使用此功能,那么相反的操作肯定会很有用。 类似这样的事情: @Entity cl
假设我有一个名为“dp”的表 Year | Month | Payment| Payer_ID | Payment_Recipient | 2008/2009 | July
我将尝试通过我的 Raspberry Pi 接入点保证一些 QoS。 开始之前,我先动手:我阅读了有关 tcp、udp 和 ip header 的内容。在IP header description我看
如果你能弄清楚如何重命名这个问题,我愿意接受建议。 在 Dart 语言中,可以编写一个带有 final 字段的类。这些是只能设置的字段构造函数前 body 跑。这可以在声明中(通常用于类中的静态常量)
你怎么样? 我有两个带有两个字段的日期选择器 我希望当用户选择 (From) 时,第二个字段 (TO) 将是 next day 。比如 booking.com 例如:当用户选择From 01-01-2
我想我已经看到了这个问题的一些答案,这些答案可能与我需要的相差不远,但我对 mysql 的了解还不够确定,所以我会根据我的具体情况提出问题。 我有一个包含多个表的数据库,为此,如果“image”表上的
我在 mySQL 数据库中有 2 个表: customers ============ customer_id (1, 2 ) customer_name (john, mark) orders ==
我正在开发一个员工目标 Web 应用程序。 领导/经理在与团队成员讨论后为他们设定目标。这是一年/半年/季度,具体取决于组织遵循的评估周期。 现在的问题是添加基于时间段的字段或存档上一季度/年度数据的
我正在寻找允许内容编辑器从媒体库中选择多个文件的东西,这些文件将在渲染中列出。他们还需要能够上传文件和搜索。它必须在页面编辑器(版本 8 中称为体验编辑器)中工作。 到目前为止我所考虑的: 一堆文件字
现在,我有以下由 original.df %.% group_by(Category) %.% tally() %.% arrange(desc(n)) 创建的 data.frame。 DF 5),
我想知道是否有一些步骤/解决方案可以处理错误消息并将它们放入 Pentaho 工具中的某个字符串或字段中?例如,如果连接到数据库时发生某些错误,则将该消息从登录到字符串/字段。 最佳答案 我们在作业的
如何制作像短信应用程序一样的“收件人”字段?例如,右侧有一个“+”按钮,当添加某人时,名称将突出显示并可单击,如圆角矩形等。有没有内置的框架? 最佳答案 不,但请参阅 Three20 的 TTMess
是否可以获取记录的元素或字段的列表 通过类型信息类似于类的已发布属性的列表吗? 谢谢 ! 最佳答案 取决于您的delphi版本,如果您使用的是delphi 2010或更高版本,则可以使用“新rtti”
我正在构建一个 SQLite 数据库来保存我的房地产经纪人的列表。我已经能够使用外键来识别每个代理的列表,但我想在每个代理的记录中创建一个列表;从代理商和列表之间的一对一关系转变为一对多关系。 看这里
我是一名优秀的程序员,十分优秀!