2010-07-24 250 views
2

渲染partials的一個助手函數渲染不正確。Rails渲染助手不渲染

def render_contact_list 
     @contact_groups = ContactGroup.find(:all, :conditions => ["user_id = ?", current_user.id]) 

     @contact_groups.each do |contact_group| 
     @contacts = Contact.find(:all, :conditions => ["group_id = ? and Owner_id = ?", contact_group.id, current_user.id]) 
     render :text => "#{contact_group.name}<br />" 
     render(:partial => 'contacts/partials/view_contacts', :collection => @contacts, :as => :contact) 
     end 
    end 

所有顯示的頁面上是

## 

當在渲染頁面的HTML看,它看起來像這樣:

#<ContactGroup:0x103090c78>#<ContactGroup:0x103090b60> 

我註釋掉塊功能完全它仍然顯示上面。

我在做什麼錯?

編輯:我剛剛意識到##來自@contact_groups,它是頁面上分配的最後一個值。它返回值並且不呈現塊內的任何代碼。

回答

4

您的幫助函數正在返回列表@contact_groups。您需要返回部分。你可能不喜歡這樣(例如粗糙):

def render_contact_list 
    @contact_groups = ContactGroup.find(:all, :conditions => ["user_id = ?", current_user.id]) 

    text = "" 
    @contact_groups.each do |contact_group| 
    @contacts = Contact.find(:all, :conditions => ["group_id = ? and Owner_id = ?", contact_group.id, current_user.id]) 
     text << render :text => "#{contact_group.name}<br />" 
     text << render(:partial => 'contacts/partials/view_contacts', :collection => @contacts, :as => :contact) 
    end 
    text 
    end 

在這裏,我們建立了所有的部分渲染件一個字符串,然後返回字符串(通過提它最後一個)。無論是否有障礙,這個事實都是巧合。你的函數和塊的第一行都是相同的東西。

+0

非常感謝,效果很好。但是,我想指出,在這個範圍內,render_to_string不起作用 - 您仍然必須使用渲染。 – 2010-07-24 06:00:58

+0

啊,太好了,謝謝@rofly。已經修改了我的答案。 – Peter 2010-07-24 06:46:22