1

モデル User とネストされたモデル Mobility があります

class User < ActiveRecord::Base
   has_many :mobilities, :dependent => :destroy
   accepts_nested_attributes_for :mobilities
end

class Mobility < ActiveRecord::Base
  belongs_to :mobile_user, :class_name =>  'User'
  validates :city_id, :presence =>true
  validates :user_id, :presence =>true
  validates :city_id, :uniqueness => {:scope => [:user_id]}
end

私の見解

=form_for @user, :as => :user, :html =>{ :class => 'form-horizontal'} do |f|
  =f.fields_for :mobilities  do |city_form|
    =city_form.text_field :city_id, :id => "city_id_#{index}"
    = f.submit "Retour"

私の問題は、フォームを送信するとRailsが次の検証エラーを表示することです:

モバイル ユーザー > doit être rempli(e)

しかし、私がこの行にコメントすると:

#validates :user_id, :presence =>true

Mobility と User オブジェクトの両方が保存され、何を知っているか: @mobility の user_id フィールドは問題ありません (私の @user の ID を示します)

内部に2つの同一のモビリティを含むフォームを送信すると、両方のモデルが保存されますが、データベースに同じuser_idとcity_idを持つ2つのモビリティオブジェクトがあるため、一意性の検証は何もチェックしなかったようです...

実際、検証時に user_id のキーを検証できないようです。私の User モデルはまだ保存されておらず、ID もまだないため、それは理解していますが、それが私の質問です。

両方を確認するにはどうすればよいですか: user_id の存在とスコープ付きの一意性???

4

0 に答える 0