迭代从控制器传递的数组

时间:2013-09-30 22:50:15

标签: javascript jquery ruby-on-rails ruby arrays

我正在使用Ruby on Rails。

这是我的视图代码,我向控制器发帖,传递参数“tplangroup.id”:

             <div id="collapse">
                 <%= form_tag(tplans_collapse_tplans_path, :method => 'post', :remote => true ) do %>
                    <%= hidden_field_tag(:tplangroup_id, tplangroup.id) %>
                 <% end %>
              </div>

这是我在控制器端的代码,它解析必要的数据并回射数组“@ordered_tplans”

             def collapse_tplans
               @collapsed_tplangroup = Tplangroup.find(params[:tplangroup_id])
               tplans_from_tplangroup = @collapsed_tplangroup.tplans
               @ordered_tplans = tplans_from_tplangroup.order("favrank DESC")

               return @ordered_tplans
              end

因为我致电:remote =&gt;如果位于视图中的原始形式为true,则会将此数组传递给名为“collapse_tplans.js”的文件

我的问题是:解析现在传递给js文件的数组并在视图中显示其内容的最佳方法/做法是什么?我是否在js文件中使用rails代码来操作对象?或者我在javascript / jquery中完成所有操作?什么是最佳实践,您能提供任何示例吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

真的有点依赖于你想要的方式,就像所有的代码一样,有很多方法可以让猫皮肤。我发现最简单的方法是将返回的ujs用作erb文件(collapse_tplans.js.erb),然后从那里选择要将重新调整的对象附加到页面上的元素,并调用标准的erb或haml partial你的迭代可以清楚地完成。

e.g。

collapse_tplans.js.erb

$('#my_wacky_element').append("<%= j render(:partial => 'collapse_tplans', :locals => { :ordered_tplans => @ordered_tplans }) %>");

然后进去 _collapse_tplans.html.erb

<ul>
  <%= ordered_tplans.each do |tplan| %>
    <li><%= tplan.attribute %></li>

答案 1 :(得分:0)

以下是关于如何从rails将数据传递给js的RailsCast: http://railscasts.com/episodes/324-passing-data-to-javascript?view=asciicast