web-dev-qa-db-ja.com

Rails SimpleFormカスタムアソシエーション選択フィールド

選択フィールドがあり、nameという名前のカスタム属性を配置したいので、次のようにしようとしました。

 <%= f.association  :in_charge, :collection => User.lawyer.map{ |l| [l.name, l.id, {:name => l.name.downcase}] } %>    

これは機能し、追加の属性を生成しますが、問題があります。値の選択属性がモデル名属性(この場合はl.name)に変更されます。場所を変更してl.idを最初に配置しましたが、id属性が表示され、重複します。なぜそうなるのでしょうか。

アソシエーション選択フィールドでカスタム属性を定義する別の方法はありますか?

18
Jirico

SimpleForm入力でラップされたRails select() フォームヘルパーを使用します。

 <%= f.input :in_charge do %>
   <%= f.select :county_id, User.lawyer.map{ |l| [l.name, l.id, {:name => l.name.downcase}] } %>
 <% end %>

SimpleFormは、内部で collection_select() を呼び出しますが、これはオプションタグの追加の属性をサポートしていないため、コードは期待どおりに機能しません。

SimpleForm readmeには solution もあります。しかし、私は自分で問題を解決するまで気づきませんでした:)

25
Will Koehler

記録としては、これは現在機能しているようです。

f.association :product, collection: Product.all.map { |product| [product.name, product.id, {data: {description: product.description}}] }

SimpleFormバージョン:

$ bundle show simple_form
/Users/josh/.rvm/gems/Ruby-2.4.1@a4aa2/gems/simple_form-4.1.0
0
Joshua Muheim