【问题标题】:Passing model / var to partial将模型/变量传递给部分
【发布时间】:2015-11-06 11:04:29
【问题描述】:

我正在尝试将一些信息从我的模型传递给我的部分,但没有成功。

我的索引如下所示:

<div class="row">
    <% @players.each do |player| %> 
    <%= render partial: "players", locals: { player: @players }%>
    <% end %>
</div>

我的部分看起来像这样:

<div class="col-md-2 player">
        <div class="thumbnail">
            <img src="https://placehold.it/200x200" alt="t">
                <div class="caption">
                    <h3><%= link_to player.name, player %></h3>
                    <p><%= "#{player.location}, #{player.age}" %></p>
                </div>
            </div>
        </div>

玩家模型:

has_one :team

团队模型:

has_many :players

我哪里失败了?

编辑:我忘了提到我收到了这个错误: undefined method 'model_name' for Player::ActiveRecord_Relation:Class

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 model-view-controller partials


    【解决方案1】:

    您有一个undefined method 'model_name' for Player::ActiveRecord_Relation:Class 错误,因为您将集合传递给部分locals: { player: @players } @players 这是ActiveRecord_Relation 集合。 link_to player.name, player 试图从集合中创建路径并失败。

    index.html.erb页面:

    <div class="row">
       <%= render partial: 'player', collection: @players %>
    </div>
    

    _player.html.erb部分:

    <div class="col-md-2 player">
        <div class="thumbnail">
            <img src="https://placehold.it/200x200" alt="t">
                 <div class="caption">
                     <h3><%= link_to player.name, player %></h3>
                     <p><%= "#{player.location}, #{player.age}" %></p>
                  </div>
              </div>
          </div>
    

    当使用复数集合调用部分时,则 部分的个别实例可以访问 通过以部分命名的变量呈现集合。

    Layouts and Rendering in Rails

    【讨论】:

      【解决方案2】:

      在渲染局部时,向本地人传递一条记录:

      <div class="row">
          <% @players.each do |player| %> 
          <%= render partial: "players", locals: { player: player }%>
          <% end %>
      </div>
      

      【讨论】:

        【解决方案3】:

        试试

        <%= render @players %>
        

        而不是

        <% @players.each do |player| %> 
          <%= render partial: "players", locals: { player: @players }%>
        <% end %>
        

        否则

        @players 替换为player

        <%= render partial: "players", locals: { player: player }%>
        

        【讨论】:

        • &lt;%= render @players %&gt; 呈现了我的收藏 7 次。 &lt;%= render partial: "players", locals: { player: player }%&gt; 渲染一次。我会做一些快速测试,看看它是否有效。你能解释一下为什么你不使用 @ 吗?
        • 我没有删除它...我应该删除它?
        • 如果没有 each 块,它会在部分中引发未定义的变量错误。
        • 您必须在使用第一个 (render @players) 时将其删除,否则您的部分将被渲染 n 次。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-16
        • 2011-06-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多