Ruby on rails 将变量传递给rails部分
我有一个表,用于显示与某些团队成员关联的客户机数量。每个表的代码基本上是相同的,所以我想我应该用一些局部变量传递给它的部分来干燥它 这是原始代码Ruby on rails 将变量传递给rails部分,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我有一个表,用于显示与某些团队成员关联的客户机数量。每个表的代码基本上是相同的,所以我想我应该用一些局部变量传递给它的部分来干燥它 这是原始代码 <thead> <tr> <th>Name </th> <th>Clients </th> </tr> </thead> <tbody> <% @strategists.each do
<thead>
<tr>
<th>Name </th>
<th>Clients </th>
</tr>
</thead>
<tbody>
<% @strategists.each do |strategist| %>
<tr>
<td><%=link_to strategist.name, strategist %> </td>
<td><%=strategist.clients.count%> </td>
<td> <%= link_to 'Edit', edit_strategist_path(strategist) %> | <%= link_to 'Destroy', strategist, method: :delete, data: { confirm: 'Are you sure?' } %>
</td>
<% end %>
</tbody>
名称
客户
|
所以我尝试用一种更通用的形式来代替它,我可以将变量传递给它
<table class="table table-striped">
<thead>
<tr>
<th>Name </th>
<th>Clients </th>
</tr>
</thead>
<tbody>
<% team_member_global.each do |team_member| %>
<tr>
<td><%=link_to team_member.name, team_member %> </td>
<td><%=team_member.clients.count%> </td>
<td> <%= link_to 'Edit', edit_team_member_path(team_member) %> | <%= link_to 'Destroy', team_member, method: :delete, data: { confirm: 'Are you sure?' } %>
</td>
<% end %>
</tbody>
</table>
名称
客户
|
下面是呈现部分对象的代码
<%= render partial: "shared/team_member_index", locals: {
team_member_global: @strategist,
new_team_member: "New Strategist",
new_team_member_path: new_strategist_path,
edit_team_member_path: edit_strategist_path
}%>
这导致了的一个nil类错误
这也会导致edit_战略家_path需要一个[:id]时出错,但如果我将其作为字符串传递,它将找不到路由
传递这些变量的正确方法是什么
使现代化
遵循下面概述的建议,并跟进一些线索,这就是结果
这是每个团队成员的索引页的共享部分。我使用了@anthony-e关于使用集合输出表的建议
<h1 class="page-header"> <%=team_member_capitalised%> </h1>
<div class="table-responsive">
<table class="table table-striped">
<thead>
<tr>
<th>Name </th>
<th>Clients </th>
</tr>
</thead>
<tbody>
<%= render partial: "shared/team_member_table", collection: team_member_global, as: :team_member, locals: {team_members: team_member_global} %>
</tbody>
</table>
</div>
<%= paginate team_member_global, :window => 2 %>
<div id="link_button">
<%= link_to new_team_member, new_team_member_path, class: "btn btn-default", role: "button" %>
</div>
名称
客户
2 %>
这是桌子。多亏了@margo,我最终找到了方法发送,这让我发现了多态路径,解决了必须通过编辑团队成员路径的主要问题。我可以动态地构造它,而不是传递它
<tr>
<td><%=link_to team_member.name, team_member %> </td>
<td><%=team_member.clients.count%> </td>
<td> <%= link_to 'Edit', edit_polymorphic_path(team_member) %> | <%= link_to 'Destroy', team_member, method: :delete, data: { confirm: 'Are you sure?' } %>
</tr>
|
这就是我在索引页面上为每个团队成员调用partial的地方(显然在需要的地方更改变量)@达拉姆指出,我使用的是@stratearator而不是@stratearators,这使我能够正确地呈现我的收藏,并强调了我的关键问题
<%= render partial: "shared/team_member_index", locals: {
team_member: @strategist,
team_member_capitalised: "Strategist",
team_members_path: strategists_path,
team_member_global: @strategists,
new_team_member: "New Strategist",
new_team_member_path: new_strategist_path,
}%>
代码现在运行得很好,谢谢大家的帮助 我认为您需要将
@战略家
分配给团队成员\u global
,而不是@战略家
另外,
edit\u straller\u path
希望将straller
传递给它,以便它可以从中推断出生成路径所需的id
。它是一个方法,因此如果您将其作为字符串传递,它将不会生成路径。您的问题不清楚分部适合何处,您在何处使用变量和字符串。您可能需要使用rails的一个助手和send从传入的类名构造路径
<% @strategists.each do |strategist| %>
<%= render partial: "shared/team_member_index", locals: {
team_member_global: strategist,
new_team_member: "New Strategist",
new_team_member_path: new_strategist_path,
edit_team_member_path: edit_strategist_path
}%>
如果该方法需要一个id,请给它一个战略家.id。可以做很多事情来简化代码。首先,您不需要传递任何这些变量,因为它们在该请求的所有视图中共享 此外,由于要渲染集合,因此可以使用以下命令替换循环:
= render partial: "shared/team_member_index", collection: @strategists, as: :strategist
现在,名为战略家
的变量将被传递给@stratears
中每个元素的分部,如下所示:
# Within _team_member_index partial:
<td><%=link_to strategist.name, strategist %> </td>
<td><%=strategist.clients.count%> </td>
<td> <%= link_to 'Edit', edit_strategist_path(strategist) %> | <%= link_to 'Destroy', strategist, method: :delete, data: { confirm: 'Are you sure?' } %>
#在_团队_成员_索引部分中:
|
这将更加干净,而且无需传递单个变量
最后,为了保持一致性,我建议将您的部分重命名为_战略家,或者该部分所代表的记录的名称
集合一开始可能有点混乱,但它功能强大,确实有助于保持视图干净和简单
这里有更多好信息:
感谢您帮助我突出我的问题,我现在已经设法使一切正常。如果你感兴趣,你可以查看我的更新。嘿,谢谢你为我指明发送的方向,它引导我走向多态链接的正确道路。我现在一切正常,如果你有兴趣,请查看我的更新。谢谢你关于使用收藏的建议。我现在一切正常,如果你有兴趣,请查看我的更新。