/ / Ako správne povoliť nulu v koľajniciach - ruby-on-rail

Ako správne povoliť nulu v koľajniciach - rubín-na-koľajnice

V mojej aplikácii Rails majú moje kapely veľa udalostí.Z pohľadu kapiel môže ukázať, aké udalosti majú. Môj problém je, že ak sa vytvorí nové pásmo, spôsobí to chybu v zobrazení, pretože nemá udalosť.

Čítal som o allow_nil a chcel som ho použiť v mojom modeli kapiel, ale nie som si istý, ako to implementovať. Dokumentácia k nej je dosť suchá a nie je naozaj užitočná

class Band < ApplicationRecord
has_many :events :allow_nil true
end

Nie som si istý, či je vyššie uvedený postup správny.

odpovede:

0 pre odpoveď č. 1

Koľajnice 5.x

Myslím, že hľadáte optional: true, ale musí sa pridať do súboru belongs_to strane združenia, napríklad takto:

class Event < ApplicationRecord
belongs_to :band, optional: true
end

Koľajnice 4.x

Koľajnice 4 umožňujú nil v predvolenom nastavení pre akékoľvek združenie, stačí odstrániť všetky potrebné validácie band_id prítomnosť.


-1 pre odpoveď č. 2

Mám podozrenie, že to, čo požadujete (overenie údajov na úrovni ActiveRecord u pridružených modelov), nie je váš problém. Vaša pôvodná otázka je o allow_nil ale uvádzate, že (s dôrazom na mňa):

Z pohľadu kapiel môže ukázať, aké udalosti majú. Môj problém je, že ak sa vytvorí nové pásmo, spôsobí to chybu v zobrazení, pretože nemá udalosť.

Pravdepodobne sa snažíte zobraziť zoznam udalostí ich opakovaním pomocou .each, ale keďže zbierka udalostí neexistuje .each chyby von. Namiesto toho skôr, ako urobíte:

<% events.each do |event| %> # or similar code that you"re using
...                       # to iterate over the collection
<% end %>

Mali by ste to skontrolovať events.present?:

<% if band.events.present? %>
<% band.events.each do |event| %>
...
<% end %>
<% else %>
# show something else
<% end %>

Kvôli úplnosti však allow_nil sa používa na konkrétnych poliach modelu na preskočenie ďalších overení platnosti tohto poľa, ak je toto pole nulové. ([Pozri dokumentáciu tu.]) (http://edgeguides.rubyonrails.org/active_record_validations.html#allow-nil)

To nefunguje v kóde, ktorý ste zverejnili vo svojej otázke, pretože tam nie je event_id pole na Band model - keďže sa jedná o združenie one-to-many od Band na Events (za predpokladu, že ste svoju databázu nastavili správne).