我有这段代码,允许用户点击添加日期以显示另一行来指定日期时间。屏幕截图显示用户输入了两个日期:
<fieldset class="date_fieldset">
<%= f.label :user_event_date, "Date", class: "info_inline_control info_label" %>
<%= f.text_field :user_event_date, class: 'datepicker' %>
<div class="user_event_inline_container margin_left_ten padding_right_gone">
<%= f.label :start_time, "Start", class: 'info_inline_control info_label five_margin_right' %>
<%= f.time_select :start_time, {:ampm => true}, class: (field_class(@user_event, :start_time) + 'info_inline_control') %>
</div>
<div class="user_event_inline_container margin_left_ten padding_right_gone">
<%= f.label :end_time, "End", class: 'info_inline_control info_label five_margin_right' %>
<%= f.time_select :end_time, {:ampm => true}, class: (field_class(@user_event, :end_time) + 'info_inline_control') %>
</div>
<%= f.hidden_field :_destroy %>
<%= link_to "delete", '#', class: 'remove_fields margin_left_ten' %>
</fieldset>
<script type="text/javascript">
$(function() {
$('.datepicker').datepicker({
dateFormat: "dd-mm-yy"
});
});
</script>
但是如果表单上其他地方的某些其他非相关字段存在验证错误,并且在表单顶部报告错误,那么用户指定日期的两行将消失,并单击“添加日期”按钮使用户重新开始指定日期。如何阻止页面刷新以显示验证错误,从而消除用户选择的日期?
以下是new,edit和create controller操作方法:
def new
if !signed_in?
redirect_to signin_path
else
@user_event = UserEvent.new
@user_event.event_dates.build
end
end
def edit
end
def create
@user_event = current_user.user_events.build(params[:user_event])
if @user_event.save
flash[:success] = "Event was successfully posted!"
redirect_to root_url
else
render action: :new
end
end
一如既往,非常感谢你的答案!
答案 0 :(得分:0)
这解决了它:
<div>
<%= f.fields_for :event_dates do |builder| %>
<%= render 'event_date_fields', f: builder %>
<% end %>
</div>
之前,我有一个空div,每次点击添加日期链接时,Javascript都会添加一个事件日期。但是当页面被重新渲染时,或者由于验证错误,或者因为用于编辑事件,div需要f.fields_for来渲染已经存在的内容。
男人我喜欢Rails和社区,因为我得到了谜题的一部分,并找出其余部分。