【问题标题】:How to organize multi-model views in Rails?如何在 Rails 中组织多模型视图?
【发布时间】:2012-06-19 04:53:02
【问题描述】:

我开始在 Rails 应用程序上进行开发,在我开始朝错误的方向前进之前,我想看看是否有一种通用的方法(即最佳实践)可以做到这一点。我有GamePlayer 的模型has_many :through 关系。我有这些部分来显示项目:

views/games/_game.html.erb

<%= content_tag_for :li, game do %>
  <span class="name"><%= game.name %></span>
  <% if game.players.any? %>
    <ul class="player_list">
      <%= render :partial => 'players/player', :collection => game.players %>
    </ul>
  <% end %>
<% end %>

views/players/_player.html.erb

<%= content_tag_for(:li, player) do %>
  <span class="name"><%= player.name %></span>
  <span class="delete">
    <%= link_to "delete", player, :method => :delete, :class => :delete %>
  <span>
<% end %>

问题是我希望玩家在不同的环境中以不同的方式显示。例如,玩家不应像在玩家索引中那样从游戏节目页面“删除”。是否可以创建另一个像 views/games/_player.html.erb 这样的部分来确定玩家在游戏上下文中的显示方式?还是有更好的解决方案?

【问题讨论】:

    标签: ruby-on-rails model-view-controller partial-views


    【解决方案1】:

    当你说:

    "是否可以创建另一个部分类似 决定如何显示玩家的views/games/_player.html.erb 在游戏的背景下”

    我相信这不是部分的目的

    您似乎在为视图提供逻辑,这在某种程度上是错误的。我相信您可以在帮助程序中使用一种方法来执行该决策逻辑。

    所以,我认为我会在您给出的示例中这样做:

    1. 有几个部分渲染不同的东西(取决于上下文)。
    2. 在帮助程序中创建一个方法,该方法将分析上下文并选择要渲染的部分。

    【讨论】:

    • 感谢您的回复。因此,如果我理解正确,您说我应该在 _player 部分中调用一个辅助方法来决定是否在给定上下文的情况下显示删除链接?换句话说,视图调用了一个删除按钮,但一个辅助方法(或演示者)确定它是否显示?
    • 如果逻辑有点复杂,是的,把它放在一个助手中,否则你可以在部分本身做一个小条件。我以为你想根据上下文渲染不同的部分。
    猜你喜欢
    • 1970-01-01
    • 2021-06-09
    • 2014-05-08
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多