在我的rails应用程序中,我的乐队有很多活动。在乐队看来,它可以显示他们有什么事件。我的问题是如果创建一个新的乐队,它将在视图中抛出一个错误,因为它没有事件。
我正在阅读有关allow_nil的内容,我想在我的乐队模型中使用它,但我不知道如何实现它。关于它的文档相当干燥,并没有真正的帮助
class Band < ApplicationRecord
has_many :events :allow_nil true
end
我不确定上述方法是否正确。
答案 0 :(得分:0)
我认为您正在寻找optional: true
,但必须在协会的belongs_to
方面添加,例如:
class Event < ApplicationRecord
belongs_to :band, optional: true
end
Rails 4默认允许nil
用于任何关联,您只需删除任何需要band_id
存在的验证。
答案 1 :(得分:-1)
我怀疑你所要求的(相关型号的ActiveRecord级别数据验证)实际上并不是你的问题。您的原始问题是关于allow_nil
,但您说明了(强调我的):
在乐队的视野中,它可以显示他们有什么事件。 我的问题是,如果创建了一个新乐队,它会在视图中引发错误,因为它没有事件。
您可能正在尝试通过使用.each
迭代事件来显示事件列表,但由于事件集合不存在.each
错误。相反,在你做之前:
<% events.each do |event| %> # or similar code that you're using
... # to iterate over the collection
<% end %>
您应该检查events.present?
:
<% if band.events.present? %>
<% band.events.each do |event| %>
...
<% end %>
<% else %>
# show something else
<% end %>
为了完整起见,allow_nil
用于模型的特定字段,以便在该字段为零时跳过该字段的其他验证。 ([见这里的文件。])(http://edgeguides.rubyonrails.org/active_record_validations.html#allow-nil)
它不适用于您在问题中发布的代码,因为您的event_id
模型上没有Band
字段 - 因为它是一对一 - 从Band
到Events
的多个关联(假设您正确设置了数据库)。