0

私は現在、ネストされたフォームとさらに別のデータテーブルの値を使用してコレクションを選択することで、1:n の関係を持つ複雑な Rails フォームを作成しています。

これまでのところ、更新前にユーザーが正しい値を選択しないと、collection_select の値リストの最初のエントリでデータベースの値が上書きされます。collection_select の初期値を正しく設定する必要があります。

私はすでに SO に関する多くの質問を読みましたが、最も関連性の高いものは次のとおりでした: f-collection-select-not-displaying-the-selected-value

まだ欠けている唯一のもの(私は願っています!)は、データベースからのフォームフィールドの値の設定です。そのため、ユーザーが選択に触れていなくても、選択可能な値からのデフォルト値で上書きされません.

このスニペットは、私のコードと上記の質問に対する解決策から派生したものであり、間違っています。

人に多くのものを持たせ、validthings には可能な値が含まれています。

モノの表には、有効なモノの表にもあるモノの文字列のみが存在します。collection_select の選択されたパラメーターに、有効なテーブルの値のリストで識別できる、things テーブルの文字列を指定することができます。

<div class="col-md-12">
  <%= form_for(@person) do |f| %>
    <%= f.fields_for :things do |d| %>
      <%= d.hidden_field :id %><%= d.hidden_field :person_id %>
      <%= d.collection_select(:Thing, Validthings.all, :Thing, :Thing, {:selected => @person.things.map(&:id).Thing.to_s} ) %>
    <% end %>
  <% end %>
</div>

これは間違っていることです:

@person.things.map(&:id).Thing.to_s

はい、表の person and things と validthings では、列の名前は "Thing" です。これはテーブルvalidthingsの一意の文字列です-データベース構造は私の考えではありませんでした.私はそれを扱うだけです.

4

1 に答える 1