2017-08-02 66 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控制台输出更新您的答案,我会尝试更新我的答案。