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