2014-11-05 87 views
0

在我的show view中,我有一些不需要用戶填寫的屬性。在我的節目我觀點可以很容易地創建一個條件,像這樣:只顯示Rails中存在的屬性

<% if @user.occupation.present? %> 
    <p><%= @user.occupation %></p> 
<% end %> 

但是,如果我有3個或更多這些可選屬性,從而爲他們每個人多條件語句可能會變得非常乏味。我認爲做這樣的事情,但事實證明,該方法是attribute私營:

<% @user.attributes.map do |attribute, name| %> 
    <% if @user.attributes.present? %> 
    <p><b><%= name %>:</b> <%= @user.attribute %></p> 
    <% end %> 
<% end %> 

爲了安全起見,我沒有必要試圖從被私人改變屬性的方法,但越是這樣只是在尋找一種方式列出已經排滿在我的模型的屬性。

回答

1
<% @user.attributes.each do |key, value| %> 
    <% if value.present? %> 
    <p><b><%= key %>:</b> <%= value %></p> 
    <% end %> 
<% end %> 
+0

對於你的第一個解決方案,我得到了錯誤'錯誤的參數數目(0 1)' – 2014-11-05 16:47:13

+0

這是'@ user.send(屬性)',而不是'@ user.send(:屬性)'。我在兩種情況下都修復了代碼。 – 2014-11-05 16:48:00

+0

我現在發現的唯一的事情就是它只能識別屬性的值而不是名稱。因此,它讀取「John Doe:John Doe」,它應該在其中讀取「name:John Doe」 – 2014-11-05 16:52:10