2011-10-20 59 views
1

這是我的觀點:Rails的 - 使用參數作爲一個模型屬性

<%= check_box_tag :age_visible, 1, checked?(:age_visible) %> 

該項訪問helper方法:

def checked?(pref) 
    if @user.preferences.pref == "1" 
    true 
    else 
    false 
    end 
end 

我想要的幫手狀態:

if @user.preferences.age_visible == "1" 

所以它會檢查數據庫,看看用戶以前是否選擇顯示他們的年齡,如果是這樣的複選框將被檢查;否則,不。現在它只是傳遞false,但如果我在助手中寫出「@ user.preferences.age_visible」,它將會傳遞true。但是,當然,我希望能夠使用助手的其他屬性。

回答

0

Davidb的回答是正確的,但對於您想要動態調用方法的未來情況,您可以使用send。例如。像這樣:

@user.preferences.send(:age_visible) 

只是有一些小技巧,讓您的助手更簡潔:

@user.preferences.send(pref) == "1" 

已經返回一個布爾值,所以你可以重寫你的助手這樣的:

def checked?(pref) 
    @user.preferences.send(pref) == "1" 
end 
+0

太棒了!感謝你及時的答覆。正是我在找什麼。 – Lee

+0

@李,其實我覺得Davidb的答案比較好。 – Mischa

+0

請參閱下面的回覆......我沒有爲每個屬性使用單獨的列,而是使用OpenStruct的首選項列。 – Lee

1

你不需要任何額外的幫手。在數據庫中創建布爾型字段時ActiveRecords提供了一種方法來查詢它是否設置爲true。試試這個:

<%= check_box_tag :age_visible, 1, @user.age_visible? %> 
+0

我沒有使用布爾型字段,因爲我必須爲每個要切換的屬性創建一個單獨的列。相反,我爲每個擁有這些信息的用戶設置了一個首選項列...我測試了它,@ user.preferences.age_visible ==「1」可以在視圖中工作,但幫助程序看起來更清晰。 – Lee

相關問題