Ruby on rails tr的模式-不同id索引页

Ruby on rails tr的模式-不同id索引页,ruby-on-rails,bootstrap-modal,Ruby On Rails,Bootstrap Modal,我有一个索引页,表中有不同的软件。 我想在单击tr时显示附加信息(以模式) 一切正常,但我有一个单一的软件,出现在我的模式,是每个tr相同的信息 我想在相应的模态中显示每个软件的信息 我的剧本: $(".clickable").click(function(e) { if (!$(e.target).hasClass('no-click')) { $('#exampleModal').modal('show'); } }); 我的看法是: <% @nonp

我有一个索引页,表中有不同的软件。 我想在单击tr时显示附加信息(以模式)

一切正常,但我有一个单一的软件,出现在我的模式,是每个tr相同的信息

我想在相应的模态中显示每个软件的信息

我的剧本:

$(".clickable").click(function(e) {
    if (!$(e.target).hasClass('no-click')) {
        $('#exampleModal').modal('show');
    }
});
我的看法是:

<% @nonpremium.each do |software| %>
  <table>
    <tr class="clickable">
        <td class="hey1">
          <%= link_to software_path(software), class: "no-click" do %>
            <%= image_tag software.logo.url(:medium), class:"no-click"%>
          <% end %>
        </td>

        <td class="hey3">
          <h6><%= software.slogan %></h6>
          <p><%= software.largeslogan %></p>
        </td>
    </tr>
</table>



<div class="modal fade bd-example-modal-lg" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel" aria-hidden="true">
  <div class="modal-dialog modal-lg">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="exampleModalLabel">Modal title</h5>
        <button type="button" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body">
        <%= link_to software.software_name, software_path(software), class:"no-click" %>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
      </div>
    </div>
  </div>
</div>
<% end %>
然后在我的模式中显示:

...
  <div class="modal-body" id="myModalName">
   Name
  </div>
  <div class="modal-body" id="myModalDesc">
    Description
  </div>
...
。。。
名称
描述
...
可能还有更好的方法,但作为一名初学者,我是如何达到预期效果的

但是我想在我的情态动词中发布视频


我是不是打算用我的显示器隐藏youtube视频,从而使我的主页过载:无?

您将无法在脚本中使用
erb
(除非它位于视图中的
脚本标记中,在这种情况下,您的代码应该可以工作)-最好使用数据属性。例如,如果将
tr
更新为以下内容:

<%= content_tag :tr, class: "clickable", data: { software_id: @software.id } do %>
  # the rest of your code within the tr
<% end %>
# Equivalent of using:
# <tr class="clickable" data-software_id="<%= @software.id %>">
一切都应该按预期进行

让我知道你进展如何,或者如果你有任何问题。希望这有帮助


根据您的评论进行编辑:

您看到的错误将出现,因为
@software
nil
,因此,您试图在
nil
上调用
id

这是一个常见错误,意味着需要确保在控制器中正确设置
@软件。如果你发布你的控制器代码,我也许能帮上忙

或者,您可以“安全地”尝试该方法,在较新版本的Ruby/Rails上使用
@software&.id
(或在较旧版本上使用
@software.try(:id)
)。然而,这在这里不太可能有帮助,更多的是旁注:)


编辑2:

因此,在您的控制器中,实际上并没有指定单数的
@software
,而是复数的
@software

   @softwares = Software.all.order(:cached_votes_up => :desc )
   @premium = Software.includes(:user).where(users: { subscribed: true }).order("RANDOM()").limit(2)
   @nonpremium = @softwares - @premium
然后,在您看来,您正在使用局部变量
software
循环通过
@nonpremium
。因此,您可以:

  • 如果控制器应始终在模式中使用相同的数据,则在控制器中分配
    @软件
  • 返回上一个选项,为
    tr
    分配一个数据属性,这是我的建议。虽然您需要更改代码以使用
    软件
    ,而不使用
    @
    来处理正确的变量,但使用该选项应该可以


#tr中的其余代码
这确保脚本根据单击的元素来处理单击,并直接从那里提取
id
,这在
软件
循环的范围内


这是为你做的吗?

谢谢你的回答,我在视图中使用了脚本标记。然而,当我做这些更改时,我得到了一个错误:nil:NilClass的未定义方法'id',我是一个初学者,可能有些东西我没有正确理解..谢谢@ClydeT-我更新了我的答案以反映这一点。那将是你的问题。如果您按照要求更新问题,我将很乐意尝试并提供帮助。好的,谢谢您的回答@SRack,我通过添加控制器页面编辑了我的问题。但是我不理解结果,我知道我已经在我的主页上发布了该软件的信息吗?那么为什么这个nil会导致模态呢?更新了@ClydeT:)这最终对@ClydeT有帮助吗?
$(".clickable").click(function(e) {
    if (!$(e.target).hasClass('no-click')) {
     var description = this.childNodes[3].innerHTML;
     var name = this.childNodes[5].innerHTML;
     document.getElementById("myModalName").innerHTML = name;
     document.getElementById("myModalDesc").innerHTML = description;
     $('#exampleModal').modal('show');
    }
});
...
  <div class="modal-body" id="myModalName">
   Name
  </div>
  <div class="modal-body" id="myModalDesc">
    Description
  </div>
...
<%= content_tag :tr, class: "clickable", data: { software_id: @software.id } do %>
  # the rest of your code within the tr
<% end %>
# Equivalent of using:
# <tr class="clickable" data-software_id="<%= @software.id %>">
$(".clickable").click(function(e) {
  if (!$(e.target).hasClass('no-click')) {
    $('#exampleModal-' + $(e.target).data('software_id')).modal('show');
  }
});
   @softwares = Software.all.order(:cached_votes_up => :desc )
   @premium = Software.includes(:user).where(users: { subscribed: true }).order("RANDOM()").limit(2)
   @nonpremium = @softwares - @premium
<%= content_tag :tr, class: "clickable", data: { software_id: software.id } do %>
  # the rest of your code within the tr
<% end %>