使用jQuery将元素的id传递给ruby

时间:2011-07-14 21:39:08

标签: jquery ruby-on-rails

我有一个表中的项列表,其中每个项显示一个名为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>

标有alphabeta的行不断变化。我希望能够使用这些相应的类来确定表行的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 %>");
  });
});

我会这样做,但属性的数量是巨大的,并且它们在不断变化。

1 个答案:

答案 0 :(得分:1)

当然无法执行:

  • ruby​​在服务器端执行

  • 你的js只会被执行客户端

=&GT;他们不能这样一起工作。

你应该创建一个js变量并在你的js中使用它。类似的东西:

var records = <%= @record.to_json%>;

然后取决于json结构:

$(".alpha td").html(records[betaId]);