0

问这个问题我感觉有点傻,但我一直在谷歌搜索我的 a*# 。

好吧,我有以下型号:

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()-Call 有关,我必须检查 @company-Model 是否先创建,然后再创建 @employment-Model 。

我怎样才能实现验证首先得到测试?

非常感谢你!

4

2 回答 2

2

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

尝试:

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

  validates_associated :company
end
于 2013-08-22T15:27:42.780 回答
1

除了 vinodadhikary 的回答,您还可以尝试拯救公司。所以代替@employment.save, 使用@company.save. 通过验证@employment时,这也应该保存。@company

于 2013-08-22T15:43:32.263 回答