我在设计User
模型并为其制作一个体面的形式时遇到了问题。我只是想确保自己做错了:)
所以它是这样的:
User
有两个Address
es:
Address
Address
我试过这样:
class User < ActiveRecord::Base
has_one :address
has_one :shipping_address, :class_name => 'Address', :foreign_key => 'shipping_address_id'
accepts_nested_attributes_for :address
accepts_nested_attributes_for :shipping_address
#validations for user
end
和
class Address < ActiveRecord::Base
#validations for address
end
然后我使用User
和嵌套form_for
为fields_for
制作表单。像这样:
= form_for @user, :url => '...' do |a|
= f.error_messages
...
= fields_for :address, @user.build_address do |a|
...
但是,尽管f.error_messages
为所有模型生成了错误,但Address
的字段在错误时不会突出显示。
当用户选择不填写第二个地址时,我也遇到了禁用第二个地址验证的问题。
我怀疑我的方法是否正确。我的意思是这个装置的has_one
关系和整体设计。
所以问题是:
我做错了吗?你怎么会在我的位置做到这一点?
答案 0 :(得分:1)
表单中的错误是每次呈现视图时都会构建一个新地址,从而丢失所有验证错误。
在您的控制器中,在new
操作中,您应该执行类似
@user.build_address
并在您的视图中写道:
= fields_for :address, @user.address do |a|
希望这有帮助。