如何在 "index" 页面和 "show" 页面中渲染略有不同的部分
How to render slightly difference partial in "index" page and "show" page
有一个模型 Company
有很多 DailyDatum
。
我想在companies/:id/daily_data
和daily_data/index
中显示每日数据。但是在公司页面我不想显示company.name
列。
views/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>
views/daily_data/index.html.erb
<table>
<thead>
<tr>
<th>Company Name</th>
<th>Daily Datum1</th>
<th>Daily Datum2</th>
</tr>
</thead>
<%= render @daily_data %>
</table>
views/companies/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?
这可能有点矫枉过正,因为您只是尝试有条件地呈现一个字段,但“正确”方法是创建一个助手。
我建议创建一个助手,根据 path
.
有条件地呈现 @daily_data
的两个部分之一
companies_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 %>
它会根据 route/url 你的位置呈现适当的部分。
您可以使用 Routing Paramters 来了解当前 action/controller 是什么,因此您可以根据 if 条件选择是否添加公司名称。
<% if action_name == 'index' && controller_name == 'daily_data' %>
<th>Company Name</th>
<% end %>
有一个模型 Company
有很多 DailyDatum
。
我想在companies/:id/daily_data
和daily_data/index
中显示每日数据。但是在公司页面我不想显示company.name
列。
views/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>
views/daily_data/index.html.erb
<table>
<thead>
<tr>
<th>Company Name</th>
<th>Daily Datum1</th>
<th>Daily Datum2</th>
</tr>
</thead>
<%= render @daily_data %>
</table>
views/companies/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?
这可能有点矫枉过正,因为您只是尝试有条件地呈现一个字段,但“正确”方法是创建一个助手。
我建议创建一个助手,根据 path
.
@daily_data
的两个部分之一
companies_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 %>
它会根据 route/url 你的位置呈现适当的部分。
您可以使用 Routing Paramters 来了解当前 action/controller 是什么,因此您可以根据 if 条件选择是否添加公司名称。
<% if action_name == 'index' && controller_name == 'daily_data' %>
<th>Company Name</th>
<% end %>