Как частично отобразить частичную разницу на странице индекса и странице показа

Есть модель Company, в которой много DailyDatum.

Я хочу показать ежедневные данные в companies/:id/daily_data и daily_data/index. Но на странице компании я не хочу показывать столбец company.name.

просмотры/daily_data/_daily_datum.html.erb

<tr>
  <td><%= daily_datum.company.name %></td>
  # This company.name needs to be shown when the partial is called from daily data index.
  <td><%= daily_datum.column1 %></td>
  <td><%= daily_datum.column2 %></td>
</tr>

просмотры/ежедневные_данные/index.html.erb

<table>
  <thead>
  <tr>
    <th>Company Name</th>
    <th>Daily Datum1</th>
    <th>Daily Datum2</th>
  </tr>
  </thead>
  <%= render @daily_data %>
</table>

просмотры/компании/daily_data.html.erb

<table>
  <thead>
  <tr>
    <!--<th>Company Name</th>-->
    <th>Daily Datum1</th>
    <th>Daily Datum2</th>
  </tr>
  </thead>
  <%= render @daily_data %>
</table>

Как мне поступить в подобной ситуации? Нужно ли мне создавать еще один частичный HTML?


person ironsand    schedule 02.06.2017    source источник


Ответы (2)


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

Я бы порекомендовал создать помощник для условного рендеринга одного из двух частей для @daily_data в зависимости от path.

company_helper.rb

def is_companies_index_path?
  current_page?(companies_index_url)
end

def is_companies_show_path?
  current_page?(companies_show_url)
end

def render_appropriate_partial
  render 'daily_data_a' if is_companies_index_path?
  render 'daily_data_b' if is_companies_show_path?
end

Затем в ваших представлениях вы можете просто позвонить:

<% render_appropriate_partial %>

И он отобразит соответствующий фрагмент в зависимости от того, какой маршрут / URL-адрес вы используете.

person Tinus Wagner    schedule 02.06.2017

Вы можете использовать параметры маршрутизации, чтобы узнать текущее действие/контроллер, поэтому с условием if вы можете добавить название компании или нет.

<% if action_name == 'index' && controller_name == 'daily_data' %>
  <th>Company Name</th>
<% end %>
person Mahmoud Sayed    schedule 02.06.2017
comment
мы отстаиваем ту же идею, за исключением того, что мой ответ рассматривает определенные вами маршруты вместо того, чтобы вручную устанавливать action_name и controller_name. Все равно будет работать, мой немного более многоразовый :) - person Tinus Wagner; 02.06.2017