我用于渲染部分的辅助函数之一未正确渲染。
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>
我把block函数完全注释掉了,它仍然显示上面的内容。
我做错了什么?
编辑:我刚刚意识到 ## 来自 @contact_groups,它是页面上分配的最后一个值。它返回值并且不渲染 block 内的任何代码。
最佳答案
您的辅助函数正在返回列表@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
在这里,我们用所有部分渲染的片段构建一个字符串,然后返回该字符串(最后提到它)。无论有没有区 block ,它都可以工作,这一事实纯属巧合。函数的第一行和 block 的计算结果是相同的。
关于ruby-on-rails - Rails 渲染助手不渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3323944/