基本的には、自分のフォームにチェックボックスを受け入れるオプションを作成したいと思います(0からすべての値が受け入れられます)。SimpleFormを使用して複数のチェックボックスの値を正しく保存するにはどうすればよいですか?
私は列挙型の構造が大好きです。なぜなら、DBに整数を格納するパフォーマンスの速度が得られるからですが、私のコードでそのシンボルを参照することができます。しかし、私はチェックボックスのような複数の値を格納しているときに列挙型を使うことはできません。
私はそれが最良のものであると想像する方法は、配列でもある文字列として保存することです。したがって、このような何か:
# refactor_rule :string default([]), is an Array
それから私のフォームは、次のようになります。
<%= f.input :refactor_rule, collection: ["dry", "concise", "performant"], as: :check_boxes, class: "form-control" %>
問題このアプローチで、私は(つまり、すべてではない)だけ1またはオプションの2保存するとき、これがあるさ私は理由[0]
で空の値で、嫌い
q.refactor_rule
=> ["", "dry", "concise"]
:属性がどのように見えますか。
次のようにだから私の質問は以下のとおりです。
- これを達成するための最もパフォーマンスの方法は何?私のチェックボックスのオプションは静的ですが、フィールドは複数ではない1を受け入れる必要があることに注意してください。
- チェックされた値と空ではない値のみを保存するにはどうすればよいですか?
- 複数の値を格納していてもRails組み込みのenum機能を利用する方法はありますか?
DB内に 'array'を使用しない場合、どうすれば保存できますか?文字列?私はすでにdbの配列として設定しています。 – marcamillion
これを文字列として保存する必要はありません。これは、これを読み書きするたびにデコードする必要があるためです。それが意味をなさけるなら、 'has_many:refactor_rules'という関係を持つ別のモデル(" RefactorRule "と呼ばれるかもしれません)を作ってください。この方法で、あなたは協会の力を利用し、Railsを最高速度で使用することができます:) – Stan