1

collection_select値ではなくテキストメソッドの名前のフィールドに名前を付ける方法を知っている人はいますか?

、、、および必要print_100に応じてさらに追加する計画があります。で始まるすべてのフィールドから選択ボックスの値を読み取るようにしたいので、選択ボックスには、、および.print_200print_500Billingprint_100200500

f.collection_select(:print_quantity, Billing.all, :print_100, :print_100)

何かご意見は?乾杯。

4

2 に答える 2

1

このソリューションのアイデアを提供してくれた@DavidDraughnnに感謝します。私は関連するヘルパーでメソッドを書いたので、次のようになります。

def get_quantities
  @quantities = {}
  Billing.column_names.each do |a|
    if a.match(/^print_/)
      @quantities[a.delete "print_"] = a.delete "print_"
    end
  end
  return @quantities
end

そして、私はに調整collection_selectしましたselect、したがって:

<% get_quantities %>
<%= f.select(:print_quantity, @quantities, {:prompt => "Please select..."}) %>

それが誰かを助けることを願っています。

于 2012-10-12T02:33:08.547 に答える
1

私はレールのこの部分にあまり詳しくないので、優しくしてください。

http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i-collection_select

the syntax is collection_select(object, method, collection, value_method, text_method, options = {}, html_options = {})

If you were to change the second parameter (method) to an actual method (rather than just the attribute that you want from the billing object) you can make the value whatever you would like.

If that doesn't work (or if you're not allowed to substitute the attribute for a method) then you may be able to make it work using the 5th or 6th parameters, value_method and text_method, which define what values should be applied to the tags.

Anyway, this answer is mostly to point you in (hopefully) the right direction, since I'm not certain of the method or how it works.

Good luck.

于 2012-10-12T00:54:35.680 に答える