2013-08-22 61 views
0

我感觉有点愚蠢的问这个,但我一直在谷歌搜索我* *关闭。Rails has_many通过验证被跳过

嗯,我有以下型号:

class Company < ActiveRecord::Base 
    has_many :employments 
    has_many :users, through: :employments 

    validates_presence_of :name 
    validates_presence_of :description 
    validates_numericality_of :zip, only_integer: true 
    validates_presence_of :email 
    validates_presence_of :street 
    validates_presence_of :city 
    validates_presence_of :country 
    validates_presence_of :telephone 
end 

class Employment < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :company 
end 

class User < ActiveRecord::Base 
    has_many :employments 
    has_many :companies, through: :employments 
end 

这里重要的是它有一定的验证公司的模型。

现在,我有以下的控制器创建一个新的公司:

class CompaniesController < ApplicationController 
    def create 
    @company = Company.new(company_params) # The params were set with a private Method 
    @employment = @company.employments.build(user: current_user, is_admin: true) 
    if @employment.save 
     redirect_to :back, flash: { success: 'Success' } 
    else 
     @title = 'Create a new company' 
     render :new 
    end 
    end 
end 

的问题是,当我离开公司,领域的空白,公司被不创建,但就业Model获取存在于数据库中。

我相信它与Company.new() - 有关,我必须检查,如果@ company-Model是在@ employment-Model创建之前先创建的。

我该如何实现验证首先得到测试?

非常感谢!

+1

除了vinodadhikary的回答,您还可以尝试保存公司。所以不用'@ employment.save',而是使用'@ company.save'。当'@ company'通过验证时,这应该也会节省@ @ employment。 – jvnill

+0

它的工作原理!非常感谢你! – pmuens

回答

2

要验证您需要使用的关联对象validates_associated。请注意链接的api文档中的“警告”和“注意”。

尝试:

class Employment < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :company 

    validates_associated :company 
end 
+0

谢谢!另一个好的解决方 – pmuens

1

除了vinodadhikary的答案,你也可以尝试为公司节省。因此而不是@employment.save,请使用@company.save。当@company通过验证时,这也应该节省@employment