2013-05-27 17 views
1

我正在構建一個用戶模型與其他模型具有多個has_many關係的rails應用程序。在一個視圖中對多個實例變量使用if語句 - Rails

class User < ActiveRecord::Base 

    has_many :model_2s 
    has_many :model_3s 
    has_many :model_4s 

end 

然後,我創建一個配置文件頁面,其中顯示當前用戶的每個模型的數據。我做這個使用一個單獨的控制器 - profiles_controller.rb

在配置文件控制我的每個基於當前用戶的這些模型的創建實例變量:

class ProfilesController < ApplicationController 

    @user = User.find(params[:id]) 
    @model_2s = @user.model_2s.all 
    @model_3s = @user.model_3s.all 
    @model_4s = @user.model_4s.all 
end 

我則能夠顯示數據從這些實例變量中顯示配置文件。我通過調用每種方法來做到這一點。

我現在想添加的功能是顯示一些默認數據(如Lorem存有佔位符文本)對於用戶沒有填寫領域。

我的問題是,我無法弄清楚如何檢查如果這些實例變量中的特定字段爲空。

例如,我想沿着線的東西:

<% if @model_2s.field_1.empty? %> 
    <p>Lorem Ipsum</p> 
<% else %> 
    <%= @model_2s.field_1 %> 
<% end %> 

然而,這給出了一個「未定義的方法‘field_1’......」的錯誤。

我知道如何檢查@ model_2s.any?以確認實例變量本身存在,但我希望能夠在下一級別進行條件檢查 - 實例變量中的字段。

+1

'@ model_2s'是一個枚舉(數組)。你可以用'@ model_2s.empty?'測試它是否爲空,或者你可以用'@ model_2s.first.field_1.blank?'(這裏選中的第一個元素)測試一個特定的元素 – Baldrick

+0

謝謝...不幸的是添加'後。第一個'我仍然得到相同的錯誤...「未定義的方法'field_1'...」 – mgtcampbell

+0

然後你的'@ model_2s'數組是空的。你首先必須檢查是否有任何東西被發現,可能是通過做'if @ model_2s.empty? || @ model_2s.first.field_1.blank?'。 –

回答

1

不知道你在做你的看法是什麼,但絕對需要循環每個這樣的結果集,如果你要訪問像field_1

<% @model_2s.each do |m| %> 

    <% if m.field_1.empty? %> 
     <p>Lorem Ipsum</p> 
    <% else %> 
     <%= m.field_1 %> 
    <% end %> 

<% end %> 

這也處理的情況下,當@model_2s是空的。

+0

太好了,謝謝。幾個問題 - 1.有一個簡單的解釋,爲什麼你只能通過使用每個循環訪問實例變量的字段?和2.如果我需要在我認爲的許多模型中做到這一點,我應該將它們設置爲輔助方法嗎? – mgtcampbell

+0

1)因爲你正在處理一個數組(實際上是一個ActiveRecord :: Relation,它的行爲就像一個數組),你處理數組的方式通常是循環的:)。 2)是的,當然,你可以使用幫手方法來清理查看代碼 – mihai

+0

真棒,謝謝:) – mgtcampbell

0

嘗試這種方式

<% if @model_2s %> 
<% @model_2s.each do |model_2| %> 
    <% if model_2.field_1.empty? %> 
     <p>Lorem Ipsum</p> 
    <% else %> 
     <%= model_2.field_1 %> 
    <% end %> 
<% end %> 
<% end %> 

這將是內環路..

+0

您無法在枚舉上調用field_1。可能是你可以循環訪問@ model_2s來獲取對象,方法/屬性(field_1)被定義。 –

+0

請參閱編輯答案 –

+0

謝謝@Thahakp - 與其他答案似乎相同 - 我需要循環訪問實例變量。 – mgtcampbell