Ton*_*ony 18 ruby-on-rails validates-associated
Rails 3包括validates_associated
在保存嵌套模型时自动调用的Rails .该方法的问题是消息很糟糕 - "模型无效"
Rails 2上有一些帖子攻击了这个问题:
而且可能还有更多.如果这些帖子中描述的Rails 3兼容,那将是一个很好的版本.主要的改进将包括为什么关联的模型失败.
在关系上,您可以使用,:autosave => true
而不是在保存父项时尝试保存子模型.这将自动运行子项的验证,并将报告正确的错误消息.
此外,如果您在子项上添加必须设置父项的状态验证,并且通过关联构造子对象,您甚至不需要该autosave
标志,并且您会收到一个漂亮的错误消息.例如:
class Trip < ActiveRecord::Base
validates :name, :presence => true
attr_accessible :name
has_many :places, dependent: :destroy, :inverse_of => :trip
end
class Place < ActiveRecord::Base
belongs_to :trip
validates :name, :trip, presence: true
attr_accessible :name
end
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用以下使用方案获得一条很好的错误消息:
> trip = Trip.new(name: "California")
=> #<Trip id: nil, name: "California">
> trip.places.build
=> #<Place id: nil, name: nil, trip_id: nil>
> trip.valid?
=> false
> trip.errors
=> #<ActiveModel::Errors:0x00000004d36518 @base=#<Trip id: nil, name: "California">, @messages={:places=>["is invalid"]}>
> trip.errors[:places]
=> ["is invalid"]
Run Code Online (Sandbox Code Playgroud)
我认为这validates_associated
是儿童自动保护之前的遗留物,并不是最好的做事方式.当然,这并不一定很好.我不是100%肯定这也适用于Rails 2.3,但我有一种感觉.添加嵌套属性功能(有时在2.x中)时会出现这些更改.
这是我在github上发布的培训项目的简化代码片段.
归档时间: |
|
查看次数: |
8746 次 |
最近记录: |