
[code]

    @tags = Tag.all
    @post.taggings.build
    
[/code]

上記はcontorllerのプログラムででtaggingsはpostテーブルとtagsテーブルの中間テーブルです。下記はviewです。

[code]

        <div class="form-group">
          <%= f.fields_for :taggings do |pt| %>
            <%= pt.collection_select :tag_id, @tags, :id, :display_name, { prompt: "選択してください", label: "タグ" }, class: "tag-fields"  %>
          <% end %>
        </div>
    
[/code]

post(ブログの投稿)を編集するときに編集ページを開くと、その投稿に紐づくタグが表示されるのはよいのですが、新規のセレクトボックス(選択してくださいと表示されているセレクトボックス)まで表示されてしまいます。

どうすれば、関連しているタグのみ表示できるのでしょうか？それとselectとcollection_selectも違いがよく分かっていないので、その辺の使い分けもご教示いただけると助かります。


CC BY-SA 3.0
2017-03-27T15:33:03.560
33586
2020-09-10T13:01:30.140
18982
question
ruby-on-rails
collection_selectについて


> 新規のセレクトボックス(選択してくださいと表示されているセレクトボックス)まで表示されてしまいます。

編集でも新規でも以下のコードがhtmlになってしまうため「選択してください」が表示されてしまいます。

`<%= pt.collection_select :tag_id, @tags, :id, :display_name, { prompt:
"選択してください", label: "タグ" }, class: "tag-fields" %>`

以下のようにすればうまくいくと思います。

  1. セレクトボックスの先頭に空の行を追加する
  2. 空の行に「選択してください」と表示する

実際のコードとしては以下のようなイメージです。

`<%= pt.collection_select :tag_id, @tags, :id, :display_name, label: "タグ" },
class: "tag-fields", include_blank: '選択してください' %>`

`include_blank` については以下でご確認ください。  
<http://railsdoc.com/references/collection_select>

また、文字列を `erb` に直接記載するよりも `i18n` を利用する方が一般的なので、余裕があれば `i18n`
について調べてみて、以下を試してみるとより良いコードになると思います、

`<%= pt.collection_select :tag_id, @tags, :id, :display_name, label: "タグ" },
class: "tag-fields", include_blank: true %>`

app_name/config/locales/ja.yml

[code]

    ja:
      helpers:
        select:
          include_blank: "選択してください"
    
[/code]


CC BY-SA 3.0
2017-04-18T01:04:41.447
34082
2017-04-18T01:04:41.447
22531
33586
answer