2016-08-09 13 views
10

tôi sử dụng Rails 5.0.0, nhưng đối với một số lý do belongs_to_required_by_default không hoạt động!Rails 5 belongs_to_required_by_default việc does't

ứng dụng được tạo ra như đường ray mới 5 ứng dụng

class Visit < ApplicationRecord 
    belongs_to :user 
end 

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

nó chỉ làm việc với optional: false tùy chọn

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

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

nhưng tại sao không làm việc cấu hình:

Rails.application.config.active_record.belongs_to_required_by_default = true 

Thanks cho bất kỳ đề xuất

Trả lời

9

Bạn đang đặt nó ở đâu? Đã xác nhận nó hoạt động bằng cách đặt nó trong development.rbconfig.active_record.belongs_to_required_by_default = true bên trong Rails.application.configure do.

Nếu bạn muốn nó cho tất cả mọi thứ bạn có thể đặt nó trong application.rb dưới lớp Application < Rails::Application như config.active_record.belongs_to_required_by_default = true

Tôi tin rằng bạn sẽ tìm thấy đặt nó trong thư mục khởi tạo sẽ có vấn đề với trình tự tải.

+0

Tôi có nó theo mặc định trong 'my_app/config/initializers/new_framework_defaults.rb' –

+1

nếu bạn muốn nó cho mọi thứ bạn có thể đặt nó trong' application.rb' trong 'class Application Ropeney

+0

yep nó hoạt động như cho câu trả lời của bạn, nhưng tôi không thể hiểu, tại sao nó không khởi tạo từ thư mục initializers? –

7

CHỈNH SỬA CHO RAILS 5.1: Mọi thứ sẽ hoạt động tốt trên ứng dụng Rails 5.1 mặc định. Chỉ cần đảm bảo config.load_defaults 5.1 có trong đơn đăng ký của bạn.rb (reference).

ĐÁP OLD cho Rails 5.0.x

Nó trông như thế này là do một số đá quý mà khỉ vá activerecord không đúng cách, theo vấn đề này Rails https://github.com/rails/rails/issues/23589.

Bạn có thể muốn bình luận/bỏ ghi chú chúng ra trong Gemfile của bạn cho đến khi bạn tìm ra thủ phạm.

Sau quá trình tẻ nhạt này, tôi thấy rằng đối với dự án mới nhất của tôi, đó là đá quý ahoy_matey, cancancandelayed_job_active_record gây ra sự cố (tại thời điểm viết).

Trong khi chờ đợi câu trả lời của Ropeney hoạt động, mặc dù không lý tưởng vì "đường ray chính thức" là khai báo config.active_record.belongs_to_required_by_default = true trong bộ khởi tạo new_framework_default‌​s.rb, không phải trong application.rb.

4

Trong trường hợp bất cứ ai vẫn còn có vấn đề này, bạn có thể nâng cấp lên Rails 5.1 để sửa chữa nó. Trong Rails 5.1, config/initializers/new_framework_defaults.rb đã được gỡ bỏ và thay thế bằng dòng config.load_defaults 5.1 trong application.rb. Dòng này bao gồm active_record.belongs_to_required_by_default = true và các tùy chọn khác nằm trong số new_framework_defaults.rb.

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

Xem cuối bài viết này để biết thêm chi tiết: https://github.com/rails/rails/issues/23589.

Các vấn đề liên quan