Rails Render Helper Not Rendering - PullRequest
2 голосов
/ 24 июля 2010

Одна из моих вспомогательных функций для рендеринга партиалов работает неправильно.

    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, являющегося последним значением, назначенным на странице.Он возвращает значение и не отображает какой-либо код в блоке.

1 Ответ

4 голосов
/ 24 июля 2010

Ваша вспомогательная функция возвращает список @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

Здесь мы строим строку со всеми частично визуализированными частями, а затем возвращаем эту строку (упоминая ее последней).Тот факт, что он работал с и без блока, является совпадением;как первая строка вашей функции, так и блок имеют одно и то же значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...