1

has_many関係のカスタムパーシャルを作成しようとしていますが、いくつかの問題が発生しています。

私のモデル

Message
has_many :formats

Format
belongs_to :message
validates_inclusion_of :format_type, :in => FORMAT_TYPES.keys

定数「FORMAT_TYPES」(wmv、flvなど)があるので、各「Format」レコードには、許可されたリストにあるmessage_idとformat_type文字列があります。

rails_adminのカスタムパーシャルを作成して、管理者がチェックボックスを使用して必要な形式を選択できるようにしようとしています。これが私が持っているものです:

- for format in FORMAT_TYPES.keys
  %div
    = check_box_tag "message[formats][]", format
    = format

これを出力します:

<fieldset>
   <legend>Formats</legend>
   <div>
  <input id="message_formats_" name="message[formats][]" type="checkbox" value="640x360_8">
  640x360_8
</div>
<div>
  <input id="message_formats_" name="message[formats][]" type="checkbox" value="480x272_8">
  480x272_8
</div>
...
</fieldset>

いくつかの形式を選択して送信すると、次のエラーが発生します。

ActiveRecord::AssociationTypeMismatch in RailsAdmin::MainController#create

Format(#2196273220) expected, got String(#2151941320)

これは、既存のフォーマットIDを想定しているようです。そのため、has_many_throughを作成して、定数を削除する必要があると思います。(それを避けようとしている)

これらの新しいフォーマットレコードの作成を可能にするために、パーシャルを適切にフォーマットする方法を理解しようとしています。何か案は?

よろしくお願いします!

4

2 に答える 2

2

同様の問題がありました。デフォルトのフォームウィジェットの代わりにチェックボックス(チェックボックスグループ)has_manyを使用する/belongs_toまたはhas_and_belongs_to_many関連付けにパーシャルを入れたいと思っていました。

関連モデルのチェックボックスグループウィジェットを簡単に使用できる拡張機能(=カスタムビューパーシャル)を作成しました。rails_admin

これは正確にはあなたのユースケースではありません (一種の列挙チェックボックスグループがあります)が、この鉱山がHAMLにある場合でも、のすべてのテンプレートrails_adminと同様に、私のテンプレートからインスピレーションを得ることができます:

- selected_ids = (hdv = field.html_default_value).nil? ? selected_ids : hdv
- n = 3
- data = []
- all_values.sort {|x, y| x[0] <=> y[0] }.each_with_index do |item, index|
  - (0..(n-1)).each do |p|
    - data[p] ||= []
    - data[p] << item if index % n == p
- data.each_with_index do |slice, c|
  %div{:class => [:column, "col-#{c}"]}
    - slice.each do |item|
      %div.checkbox_field
        = check_box_tag "#{form.dom_name(field)}", item[1], selected_ids.include?(item[1]), {:id => "#{field.method_name}_#{item[1]}"}
        %label{:for => "#{field.method_name}_#{item[1]}"}
          = item[0]

他の解決策は、デフォルトのrails_admin列挙機能https://github.com/Juicymo/rails_admin/wiki/Enumeration)を使用し、カスタムの定数とフォームを追加する代わりに、チェックボックスを使用するように部分的なテンプレートを変更することです。

興味がある場合は、テンプレートとrails_adminチェックボックスグループの関連付けウィジェット拡張機能がGitHubhttps://github.com/Juicymo/rails_admin/blob/master/app/views/rails_admin/main/_form_checkboxes_multiselect.html.hamlでオープンソース化されています。

于 2012-09-28T20:01:35.837 に答える
1

問題は、formatがオブジェクトであり、formatの文字列値を渡していることです。formatの代わりにformat_idsを使用できます。

= check_box_tag "message[format_ids][]", format.id

フォーマットを許可しないようにするには(フォーマットを保存できないようにする場合)、ダンビーの非表示フィールドを追加する必要もあります。

= hidden_field_tag "message[format_ids][]", 0
于 2011-06-24T15:08:05.037 に答える