【发布时间】:2011-09-29 12:38:14
【问题描述】:
我在设计User 模型并为其制作体面的形式时遇到了问题。我只是想确保自己做错了:)
所以它是这样的:
User 有两个Addresses:
- 一个强制性的
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
然后我使用form_for 和嵌套fields_for 为User 创建一个表单。像这样:
= form_for @user, :url => '...' do |a|
= f.error_messages
...
= fields_for :address, @user.build_address do |a|
...
但是,尽管f.error_messages 为所有模型生成错误,Addresses 的字段在错误时不会突出显示。
当用户选择不填写第二个地址时,我在禁用第二个地址验证时遇到问题。
我怀疑我的方法是否正确。我的意思是has_one 关系和这个装置的整体设计。
那么问题来了:
我做错了吗?你会如何代替我这样做?
【问题讨论】:
-
我会在
User中使用belongs_to关联,但随后表单会爆炸! -
外键存储在哪里?如果
user有address_id和shipping_address_id它应该是belongs_to否则has_one(和地址belongs_to用户)。 -
在
User中使用has_one后,ActiveRecord 想要地址中的shipping_address_id和address_id!所以我把它们放在那里。我知道这不是最好的主意,而且现在整个关系有点颠倒了。
标签: ruby-on-rails ruby-on-rails-3 rails-activerecord nested-forms