sql >> データベース >  >> RDS >> PostgreSQL

datetime_selectのマルチパラメータエラー

    キリスト教徒。これは、データベースをチェックしてマルチパラメータ属性に必要なタイプを推測するRailsのバグです。私の推測では、「date_time」属性はデータベースの時間列に関連付けられていません。

    私は最近、データベース以外の属性を受け入れたマルチパラメータ属性にするというこの問題に取り組みました。これは、私が思いついた最善の解決策でした:

    attr_accessorを設定したいと思った form_forでモデルへの日付の受け渡しを処理する f.datetime_selectのタグ ヘルパー。これが私が持っていたものです:

    モデル:

    attr_accessor :my_time
    

    表示:

    <%= f.datetime_select :my_time %>
    

    残念ながら、フォームを送信すると次のように表示されます:

    1 error(s) on assignment of multiparameter attributes
    

    これは実際には、チケットが提出されたRailsのバグであることがわかりました。それまでの間、これをどのように機能させるのでしょうか。リモートで魅力的であることがわかった唯一の解決策は、composed_ofを利用することでした。 attr_accessorの代わりとして 。だから...

    モデル:

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

    composed_ofについてはほとんど何も知りません メソッドなので、おそらく独自の読み取りを行う必要がありますが、私が知っているのは、指定されたインスタンス変数のリーダーとライターの両方を作成し、さらに重要なことに、セッターはマルチパラメーター属性を受け入れるということです。オプションの選び方:

    class_name:予想されるクラスの名前。この場合、Time
    マッピング:最初の引数はクラスであり、2番目の引数はクラスのインスタンスが応答するすべてのメソッドで機能するようです。 to_sを選択しました コンストラクター:これがどのように機能するのかよくわかりません。 @my_timeのときに呼び出されるようです nilです 。
    コンバーター:これがどのように機能するのかよくわかりません。 my_time =から呼び出されたようですが、一括割り当てには適用されていないようです。このソリューションで遭遇した問題の1つは、環境のタイムゾーンではなくUTCで時刻が設定されていたことです。そのため、残念ながらmy_timeを直接使用することはできませんが、代わりに適切なタイムゾーンに変換する必要があります。

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


    1. Perlで非決定論的なMySQLエラーを追跡する

    2. MySQLテーブルをUTF-8に変更するにはどうすればよいですか?

    3. asp.netコアOracle.DataAccessSystem.BadImageFormatException:ファイルまたはアセンブリOracle.DataAccessを読み込めませんでした

    4. jpaを使用してpostgresからbyte[]を読み取るときに長さがほぼ2倍になる