Рендеринг результатов нескольких действий в одном запросе на рельсы - PullRequest
0 голосов
/ 22 июня 2011

Я использую Ruby on Rails и пытаюсь загрузить страницу, которая состоит из множества подстраниц.Каждая подстраница довольно различна, и данные для каждой подстраницы генерируются отдельным действием в контроллере.После загрузки главной страницы я также хочу загрузить содержимое подстраниц, вызвав соответствующие действия.

Таким образом, мой вопрос заключается в том, возможно ли выполнить несколько запросов на разные действия на одной странице запроса.Если это так, каков наилучший способ добиться этого, чтобы итоговые представления каждого действия отображались в правой части страницы?Если это невозможно, как еще можно загрузить контент, обработанный из разных действий, в одном запросе?

В идеале, действия для подстраниц могут вызываться из разных мест (например, подстраница может быть компонентомдругих страниц, а также может быть своей собственной страницей).Я хочу абстрагироваться от места, откуда вызывается действие из контроллера, чтобы я мог просто визуализировать соответствующий фрагмент для данных, сгенерированных контроллером.Но ключ в том, что это частичное будет определяться не в контроллере, а в виде.Что-то подобное было сделано?Есть ли еще лучшая альтернатива?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 22 июня 2011

То, что вы хотите сделать, не должно решаться путем вызова различных действий.

В контроллере вы знаете, какие модели вы хотите отобразить в представлении, поэтому вы соответственно устанавливаете атрибуты, например,

@user = current_user
@team = current_user.team.first
@top_teams = Team.top5 # this is a scope returning the 5 top teams

По вашему мнению, вы затем используете партиалы для визуализации различных частей вашего сайта

<%= render "users/parts/box", :user => @user %>
<%= render "teams/parts/detail", :team => @team %>
<%= render "teams/parts/top", :collection => @top_teams %>

Я предлагаю вам взглянуть на Opensourcerails, который сам с открытым исходным кодом и использует эту технику. Хорошим примером является действие show пользователя.

0 голосов
/ 22 июня 2011

Я точно не знаю, что вы хотите. Но определенно вы не можете отобразить другое действие с представлениями как часть текущего действия.

Однако вы можете написать на контроллере приватные методы для настройки переменных и включить соответствующие общие партиалы в ваши файлы представлений.

Это пример:

class UsersController < ...
  def show
    @user = current_user

    setup_user_friends_widget(@user)
  end

  private

  def setup_user_friends_widget(for_who)
    @use_user_friends_widget= true

    @friends = for_who.friends
  end
end

# in your view users/show.html.erb

<%- if @use_users_friend_widget %>
  <%= render :partial => "shared/widgets/user_friends"
<%- end %>

# in shared/widgets/_user_friends

<%- @friends.each do |friend| %>
  # use the instance variables directly because you have to call the setup_user_friends_widget method before you could use this widget.
  # so you are safe to use the instance variables instead of passing them from render :partial

  ...
%>

Таким образом, вы можете извлечь эти общие вещи в частные методы на контроллерах, и эти методы автоматически получат доступ к параметрам, сеансам и файлам cookie, если они вам нужны.

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