2016-08-09 54 views
10

我使用Rails 5.0.0,但由於某些原因belongs_to_required_by_default不起作用!Rails 5 belongs_to_required_by_default does not work

應用程序創建新的軌道5應用

class Visit < ApplicationRecord 
    belongs_to :user 
end 

> v = Visit.new 
> v.valid? # => true 

它僅適用於optional: false選項

class Visit < ApplicationRecord 
    belongs_to :user, optional: false 
end 

> v = Visit.new 
> v.valid? # => false 

但爲什麼不工作配置:

Rails.application.config.active_record.belongs_to_required_by_default = true 

感謝您的任何建議

回答

9

你把它放在哪裏?已確認它的工作方式是將作爲config.active_record.belongs_to_required_by_default = true放入Rails.application.configure do之內。

如果你想要的一切,你可以把它放在application.rbApplication < Rails::Application類爲config.active_record.belongs_to_required_by_default = true

我相信你會發現把它在初始化目錄將與加載順序問題。

+0

如果您希望將它放在'class Application

+1

.active_record.belongs_to_required_by_default = true' – Ropeney

+0

是的,它適用於你的答案,但我不明白,爲什麼它不初始化初始化文件夾? –

7

EDIT FOR RAILS 5.1:一切都應該在默認的Rails 5.1應用程序上運行良好。只要確保config.load_defaults 5.1在你的application.rb(reference)。

爲Rails 5.0.x的

OLD回答的樣子,這是由於一些寶石猴子補丁的ActiveRecord不正確,根據本Rails的問題https://github.com/rails/rails/issues/23589

你可能想要在你的Gemfile中註釋/取消註釋,直到找到罪魁禍首。經過這個繁瑣的過程之後,我發現對於我最近的項目來說,這是造成問題的寶石ahoy_matey,cancancandelayed_job_active_record(撰寫本文時)。

與此同時Ropeney的回答作品,雖然不是理想的,因爲「官軌方式」是在new_framework_default‌​s.rb初始化申報config.active_record.belongs_to_required_by_default = true,而不是在application.rb

4

如果有人仍然有這個問題,你可以升級到Rails 5.1來解決它。在Rails 5.1中,config/initializers/new_framework_defaults.rb已被刪除並替換爲application.rb中的線路config.load_defaults 5.1。該行包括 active_record.belongs_to_required_by_default = true以及new_framework_defaults.rb中的其他選項。

module myApp 
class Application < Rails::Application 
# Initialize configuration defaults for originally generated Rails 
version. 
    config.load_defaults 5.1 

查看此線程的末尾以獲取更多詳細信息:https://github.com/rails/rails/issues/23589