2013-02-14 97 views
0

我的觀點:Rails的單選按鈕選項哈希

<%= 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" 

我應該這樣做在我的控制器,或者我可以rating_label添加到我的radio_button_tag作爲另一個屬性?

UPDATE:

我想在我的控制器的情況下發言,但得到的NoMethodError 「未定義的方法評價」

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 

回答

2

使用radio_button_tagfields_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))