当存在无关的验证错误时,为什么Rails会重置用户选择的时间?

时间:2013-06-21 14:01:31

标签: ruby-on-rails ruby-on-rails-3.2

我有这段代码,允许用户点击添加日期以显示另一行来指定日期时间。屏幕截图显示用户输入了两个日期:

<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>

two dates entered and OK

但是如果表单上其他地方的某些其他非相关字段存在验证错误,并且在表单顶部报告错误,那么用户指定日期的两行将消失,并单击“添加日期”按钮使用户重新开始指定日期。如何阻止页面刷新以显示验证错误,从而消除用户选择的日期?

user selected dates gone

以下是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

一如既往,非常感谢你的答案!

1 个答案:

答案 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和社区,因为我得到了谜题的一部分,并找出其余部分。