sql >> Databáze >  >> RDS >> PostgreSQL

multiparametrová chyba s datetime_select

Křesťan. Toto je chyba v Rails, která kontroluje databázi, aby odvodila typ potřebný pro multiparametrové atributy. Odhaduji, že váš atribut „date_time“ není spojen se sloupcem času ve vaší databázi.

Nedávno jsem se vypořádal s tímto problémem, kde jsem chtěl atribut, který není v databázi, k akceptovaným multiparametrovým atributům, toto bylo nejlepší řešení, se kterým jsem mohl přijít:

Zjistil jsem, že chci nastavit attr_accessor pro zpracování předání data mému modelu ve form_for tag s f.datetime_select pomocník. Takže tohle jsem měl:

Model:

attr_accessor :my_time

Zobrazit:

<%= f.datetime_select :my_time %>

Bohužel při odeslání formuláře se mi zobrazí toto:

1 error(s) on assignment of multiparameter attributes

Ukazuje se, že se ve skutečnosti jedná o chybu Rails, na kterou byl podán tiket. Jak to mezitím zajistíme? Jediné řešení, které bylo vzdáleně atraktivní, bylo použití composed_of jako náhrada za attr_accessor . takže...

Model:

  composed_of :my_time,
              :class_name => 'Time',
              :mapping => %w(Time to_s),
              :constructor => Proc.new{ |item| item },
              :converter => Proc.new{ |item| item }

O composed_of nevím téměř nic metodu, takže byste si na ní pravděpodobně měli udělat vlastní čtení, ale vím, že pro danou instanční proměnnou vytvoří čtečku i zapisovač a co je důležitější, setter přijímá multiparametrické atributy. Jak jsem vybíral možnosti:

class_name:název naší očekávané třídy. V tomto případě Time
mapování:prvním argumentem je třída a zdá se, že druhý argument funguje s jakoukoli metodou, na kterou instance třídy odpovídá. Vybral jsem to_s konstruktor:Nejsem si jistý, jak by to mělo fungovat. Zdá se, že je voláno, když @my_time je nil .
konvertor:Nejsem si jistý, jak to má fungovat. Zdá se, že je voláno když z my_time=, ale nezdá se, že by bylo použito s hromadným přiřazením. Jedním z problémů, na který jsem s tímto řešením narazil, bylo, že se časy nastavovaly v UTC místo v časovém pásmu prostředí. Takže bohužel nemůžeme použít my_time přímo, ale místo toho jej musíme převést na správné časové pásmo:

Time.zone.parse(my_time.to_s(:number))


  1. Existuje způsob, jak zobrazit Ano nebo Ne v dotazu na výsledek namísto 0 nebo 1?

  2. Podivný výsledek pro GROUP_CONCAT v dílčím dotazu

  3. Jak navrhnu tabulku, která bude ukládat velmi velká data?

  4. 5 Návyky monitorování databáze úspěšných správců databází