2017-08-02 44 views
1

我有一個自從1月份以來一直在研究的rails 5項目,今天我發現我能夠創建一個沒有指定父項的子記錄。這是相當令人震驚的,因爲我證實我使用rails 5.1.2以及ruby 2.4.1。該網站仍在開發中。我打開了rails控制檯並測試了一些應該有父驗證的其他模型(應該在rails 5中默認進行驗證),並且這些記錄也是在沒有關聯的情況下創建的。Rails 5停止驗證關聯

這沒有任何意義。我知道這在某種程度上起作用。本週早些時候發生了最大的變化,當時我在文件上傳中添加了「回形針」。有沒有人有任何建議或有什麼想檢查什麼想法?

class Order < ApplicationRecord 
    require 'csv' 

    include SendGrid 
    belongs_to :admin, optional: true 
    belongs_to :user 
    has_one :return 
    has_many :order_shipments, dependent: :destroy 
    has_many :order_items, dependent: :destroy 
    has_many :order_addresses, dependent: :destroy 
    has_many :order_comments, dependent: :destroy 


    ...... 

end 




class OrderShipment < ApplicationRecord 
    belongs_to :order 
end 

我已經添加下面的代碼我development.rb和production.rb環境,它看起來好像是壓倒一切的東西,回形針可以做,以解決這個問題。

config.active_record.belongs_to_required_by_default = true 

不過,我覺得這個代碼應該在application.rb中,但「配置」未初始化這樣做,所以當我收到以下錯誤:

undefined local variable or method `config' for main:Object (NameError) 
+1

您可以添加一個示例,說明您的模型如何設置以及您創建這些模型的過程?請參閱[如何創建最小,完整和可驗證的示例](https://stackoverflow.com/help/mcve)另外,如果您從頭開始創建新項目,您會看到這個嗎? –

+0

我假設這是** belongs_to **父母的關係。在rails 5.X中屬於需要的默認值。但回形針可能會做一些不同的事情,然後一個** belongs_to **你可以發佈你的模型的一些代碼? –

+0

@MichaelDeering我已經添加了一些代碼。你的假設是正確的。 –

回答

0

首先offtopic:我強烈建議反對使用保留字作爲關聯,如has_one :return,因爲您最終將陷入衝突。如果你想設置Rails的配置變量在production.rbdevelopment.rb,你必須使用Rails.application.config.而不是僅僅config.這些文件

def some_method 
    # ...some actions 
    return # say, you wanted to return the association. 
end 

在這種情況下,你將不能夠這樣做。

在Rails 5 belongs_to應該默認進行驗證,除非您爲關聯指定optional: true。所以在這種情況下,您的關聯belongs_to :admin將不會被驗證。如果您有其他關聯問題,請在嘗試創建沒有任何其他關聯的Order對象時使用rails控制檯輸出更新您的答案,我會嘗試更新我的答案。