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

ここで重要なのは、いくつかの検証がある company-Model です。

これで、新しい会社を作成するための次のコントローラーができました。

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

問題は、会社のフィールドを空白のままにすると、会社が作成されず、雇用モデルがデータベースに永続化されることです。

@employment-Model が作成される前に、@company-Model が最初に作成されるかどうかを確認する必要がある Company.new()-Call と関係があると思います。

検証が最初にテストされるようにするにはどうすればよいですか?

どうもありがとうございました!

4

2 に答える 2

1

vinodadhikary の回答に加えて、会社を救うこともできます。の代わりに@employment.saveを使用します@company.save@employment検証に@company合格すると、それも保存されるはずです。

于 2013-08-22T15:43:32.263 に答える