我有一个表中的项列表,其中每个项显示一个名为Record的Ruby类的属性。每个项目都在自己的行中。每个<tr>
都有id
,它反映了该属性的名称,并且在任何给定时间,一行将包含类alpha
,其中一行将具有类beta
- 如下所示:
<table>
<tr id="attribute_1">
<td><%= @record.attribute_1 %></td>
</tr>
<tr id="attribute_2" class="alpha">
<td><%= @record.attribute_2 %></td>
</tr>
<tr id="attribute_3">
<td><%= @record.attribute_3 %></td>
</tr>
<tr id="attribute_4" class="beta">
<td><%= @record.attribute_4 %></td>
</tr>
</table>
标有alpha
和beta
的行不断变化。我希望能够使用这些相应的类来确定表行的id并将它们传递给ruby,以便我可以(为了这个问题的目的)切换它们,例如(是的,我知道有更简单的方法)如何在不使用红宝石的情况下完成此任务,但只需使用它。)
我现在尝试这样做的方式是使用jQuery,它在按下按钮时调用一个函数。
$(function document() {
$(".button").click(function() {
var alphaId = $(".alpha").attr("id");
var betaId = $(".beta").attr("id");
$(".alpha td").html("<%= @record." + betaId + " %>");
$(".beta td").html("<%= @record." + alphaId + " %>");
});
});
这不起作用,因为ruby无法编译。最终,结果应如下所示:
<table>
<tr id="attribute_1">
<td><%= @record.attribute_1 %></td>
</tr>
<tr id="attribute_2" class="alpha">
<td><%= @record.attribute_4 %></td>
</tr>
<tr id="attribute_3">
<td><%= @record.attribute_3 %></td>
</tr>
<tr id="attribute_4" class="beta">
<td><%= @record.attribute_2 %></td>
</tr>
</table>
请注意,attribute_2和attribute_4的输出已切换。如果您有任何其他方法可以解决此问题,请告诉我们!感谢。
此外,值得注意的是jQuery位于视图文件 views / records / switch.js.erb 中,并在服务器端执行。例如,以下代码可以正常工作:
$(function document() {
$(".button").click(function() {
var alphaId = $(".alpha").attr("id");
var betaId = $(".beta").attr("id");
$(".alpha td").html("<%= @record.attribute_4 %>");
$(".beta td").html("<%= @record.attribute_2 %>");
});
});
我会这样做,但属性的数量是巨大的,并且它们在不断变化。
答案 0 :(得分:1)
当然无法执行:
ruby在服务器端执行
你的js只会被执行客户端
=&GT;他们不能这样一起工作。
你应该创建一个js变量并在你的js中使用它。类似的东西:
var records = <%= @record.to_json%>;
然后取决于json结构:
$(".alpha td").html(records[betaId]);