0

私の見解:

<%= radio_button_tag "recommendation_ratings[#{rec.recommendation.id}][rating]", '3'%>

私のコントローラーでは、これらの値を解析します。

 input = params[:recommendation_ratings].values
 input.each do |mini_params|
 rating = mini_params[:rating]
 recommendation_id = mini_params[:recommendation_id]

評価変数を使用して、同じコントローラー アクションで新しいレコードを作成します。

rate = Rating.new(
    :rating => rating,
    :label => rating_label)

新しいレコードが作成されたときに、rating_label に評価を割り当てるにはどうすればよいですか。例:

if rating == 1 rating_label = "Fair"

コントローラーでこれを行う必要がありますか、または別の属性として radio_button_tag に rating_label を追加できますか?

アップデート:

コントローラーで case ステートメントを試しましたが、NoMethodError "Undefined Method Rating" が発生しました

 rating case
      when rating == 1
        rating_label = "Bad"
      when rating == 2
        rating_label = "Fair"
      when rating == 3
        rating_label = "Good"
      else rating == 0
        rating_label = "N/A"
      end
4

1 に答える 1

2

ブロックradio_button_tagへの使用からビュー コードをリファクタリングします。fields_for

<%= fields_for :recommendation_ratings do |f| %>
  <% f.hidden_field :id, rec.recommendation.id %>
  <% f.radio_button :rating, 3 %>
<% end %>

コントローラーのコードを次のように変更します。

selected_rating = params[:recommendation_ratings]
rating = selected_rating[:rating]
recommendation_id = selected_rating[:id]

そして、ヘルパーメソッドを次のようにどこかに追加します。

def rating_label(rating)
  %w{N/A Bad Fair Good}[rating.to_i]
end

Ratingこれで、次のような新しいオブジェクトを作成できます。

rate = Rating.new(
  :rating => rating,
  :label => rating_label(rating))
于 2013-02-14T19:47:53.277 に答える