Ruby on rails tr的模式-不同id索引页
我有一个索引页,表中有不同的软件。 我想在单击tr时显示附加信息(以模式) 一切正常,但我有一个单一的软件,出现在我的模式,是每个tr相同的信息 我想在相应的模态中显示每个软件的信息 我的剧本: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
$(".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">×</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 %>