0
我無法將對象保存到對應的表中。Rails validates_presence_of並驗證has_one關聯模型中的存在
模型客戶。我想,以確保它有一個相關的有效帳戶:
has_one :account, dependent: :destroy
validates_presence_of :account
validates_associated :account
型號賬戶所屬客戶,所以我想執行的customer_id存在:
belongs_to :customer
validates :customer_id, presence: true
現在,我的問題是:應該以何種順序我保存這些對象?這些驗證有些不相容嗎?
因爲,如果我嘗試先保存客戶,這將是不可能的,我會得到
myCustomer.save.errors.messages
{:account=>["can't be blank"]}
很明顯,因爲我在模型中陳述
validates_presence_of :account
。
但是,如果我嘗試先保存帳戶,請等待!我也無法保存它!我有
驗證:CUSTOMER_ID,存在:真
在我的賬戶模型,我還沒有保存任何客戶呢!
所以我也試圖只是初始化帳戶:
acc = Account.new(acc_attr: foo, acc_attr2: bar)
,然後嘗試將它設置爲客戶這樣
Customer.account = acc
但話又說回來,客戶不會因爲ACC保存是無效的(因爲它沒有customer_id,我在客戶模型中有validates_associated:account)
那麼,我將不得不放棄一種驗證模式嗎?有沒有解決方法?
謝謝!
我需要什麼設計?另外,我還沒有控制器。我只想保存這些對象。 –
使用'attr_accessible :: customer_id'來訪問數據庫。設計用於attr_accessible。控制器是一個選項,如果您的模型沒有任何控制器,則不需要檢入控制器。 –
[Rails 4使用強參數](http://edgeapi.rubyonrails.org/classes/ActionController/StrongParameters.html)。 'attr_accessible'已被棄用,正如[here]所述(http://apidock.com/rails/ActiveModel/MassAssignmentSecurity/ClassMethods/attr_accessible)。 [This SO answer](http://stackoverflow.com/a/17371364)很好地描述了強參數如何取代'attr_accessible'。 –