我有点愚蠢地问这个问题,但我一直在谷歌搜索我的*#off。
我有以下型号:
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
问题是,当我离开公司 - 字段空白时,公司没有被创建,但就业模型在数据库中得到了持久性。
我相信它与Company.new()有关 - 如果在创建@ employment-Model之前首先创建@ company-Model,我必须检查。
如何实现首先测试验证?
非常感谢!
答案 0 :(得分:2)
要验证关联对象,您需要使用validates_associated。请注意链接的api文档中的“警告”和“注释”。
尝试:
class Employment < ActiveRecord::Base
belongs_to :user
belongs_to :company
validates_associated :company
end
答案 1 :(得分:1)
除了vinodadhikary的回答,您还可以尝试保存公司。因此,请使用@employment.save
而不是@company.save
。当@employment
通过验证时,这也应该保存@company
。