Ruby on rails 父模型的Rails 3 fail验证是嵌套属性的验证fail
我有两个模型,用户和房子。他们有一对一的联系Ruby on rails 父模型的Rails 3 fail验证是嵌套属性的验证fail,ruby-on-rails,validation,nested-forms,nested-attributes,Ruby On Rails,Validation,Nested Forms,Nested Attributes,我有两个模型,用户和房子。他们有一对一的联系 class User < ActiveRecord::Base attr_accessible :name, :house_attributes has_one :house, :dependent => :destroy validates :name, :presence => true accepts_nested_attributes_for :house, allow_destroy: true,
class User < ActiveRecord::Base
attr_accessible :name, :house_attributes
has_one :house, :dependent => :destroy
validates :name, :presence => true
accepts_nested_attributes_for :house, allow_destroy: true, :reject_if => lambda { |a| a['desc'].blank? }
end
class House < ActiveRecord::Base
attr_accessible :desc, :price
belongs_to :user
validates :desc, :presence => true
end
我希望总是在创建用户的同时创建房子。所以,若house验证失败,它不应该创建用户。(现在房屋模型只有一个验证,即:desc字段需要存在。)
如果:desc为空,则不创建模型中的代码“仅担保房屋”。但它仍然会创建用户
我试图在用户模型内部添加自定义验证,但找不到访问用户模型内部的:desc属性(调用self.desc失败)或:house_属性(self.house_属性)的方法。在创建房屋之前,我真的不知道rails在哪里存储这些房屋属性
我希望你们能帮我找到一个好的和清晰的方法
1) 能够验证并显示:desc属性的错误消息。此时错误消息将只显示在用户模型的:name字段中
2) 如果用户或房屋的验证失败,则不保存用户
3) 如果任何验证失败,则呈现:新建
谢谢您应该向您的用户模型中添加
validates\u associated:house
。这将运行房屋验证,并确保在认为用户有效之前验证成功。您应该将验证\u关联:房屋
添加到您的用户模型中。这将运行房屋验证并确保它们在认为用户有效之前成功。我认为它将执行与以下操作相同的操作:如果内部接受嵌套的属性,则拒绝,即:它不会创建房屋,但仍将创建用户我认为它将执行与以下操作相同的操作:如果内部接受嵌套的属性,则拒绝,也就是说:它不会创建房子,但仍然会创建用户。您找到解决方案了吗?之前,我需要根据父日期验证嵌套属性日期saving@scanales没有。我没有使用嵌套属性。你找到解决方案了吗?之前,我需要根据父日期验证嵌套属性日期saving@scanales没有。我没有使用嵌套的属性
<%= simple_form_for(@user) do |f| %>
<%= f.input :name %>
<%= f_builder.simple_fields_for :house, @house do |h| %>
<%= h.input :price %>
<%= h.input :desc %>
<% end %>
<%= f.button :submit %>
<% end %>
def new
@user = User.new
@house = @user.build_house
respond_to do |format|
format.html # new.html.erb
end
end