validation_nested_attributes_for值在验证失败时清除

时间:2014-03-05 11:21:19

标签: ruby-on-rails nested-forms nested-attributes

我有以下关系

class user
 has_many cars
 has_many journeys, :through => :cars
 accepts_nested_attributes_for :journeys
end

class car
 belongs_to user
 belongs_to journey
end

class journey
 has_many car
 has_many users, :through => :cars
end

我有一个表格来编辑现有用户和/或旅程:

<%= simple_form_for @user, :url => edit_user_path(@user), :method => :put do |f| %>
  <%= f.input_field :email %>
  <%= f.simple_fields_for :journey, @journey do |j| %>
     <%= f.input_field :name %>
  <% end %>
<% end %>

我对@ user.email属性进行了验证。如果失败,则会正确返回表单,并显示所有@user属性。但是,它会清除我在@ journey.name属性输入字段中放置的任何值。

这不是非常用户友好,因为用户显然已填写此字段。如何阻止这种情况发生?

编辑:根据以下信息更新

最后我通过了以下的解决方案。 :journeys为我提供了必要的rails功能,可以在验证错误时正确地重新填充表单,if语句确保它只显示所需的实例:

<%= simple_form_for @user, :url => edit_user_path(@user), :method => :put do |f| %>
  <%= f.input_field :email %>
  <%= f.simple_fields_for :journeys do |j| %>
     <% if @journey.id == j.object.id %>
        <%= f.input_field :name %>
     <% end %>
  <% end %>
<% end %>

1 个答案:

答案 0 :(得分:2)

不要在simple_fields_for上指定@journey - 这不是您正在验证和重新填充的实例。让Rails处理它 - 它会为你选择@user.journeys