我有以下关系
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 %>
答案 0 :(得分:2)
不要在simple_fields_for上指定@journey
- 这不是您正在验证和重新填充的实例。让Rails处理它 - 它会为你选择@user.journeys
。