如何将数组从一个视图发送到下一个视图

时间:2012-08-27 13:05:27

标签: ruby-on-rails ruby arrays views ruby-on-rails-3.2

我有一个带有getAccounts函数的Controller,我在那里查找某些帐户。我的想法是先显示结果数,然后将结果数组发送到下一个名为showAccounts的函数,该函数生成视图。首先,我将结果数组声明为实例变量。然后我尝试使用表单标签发送。它不起作用......有人有想法吗?

  def getAccounts
filter = '(uid='+params[:id]+')'
attrs = ['*']
@accounts=Array.new

conn = LDAP::Conn.new($HOST, $PORT)
conn.bind('cn=admin, dc=cippool-mb, dc=rwth-aachen, dc=de','DLPins!')
conn.perror("bind")

begin
  conn.search($base, $scope, filter, attrs) { |entry|
    setAttributes(entry)
  }
 rescue LDAP::ResultError
   conn.perror("search")
   exit

 end
 conn.perror("search")
 conn.unbind


end

def showAccounts

end

我发送数据的视图。

Es wurden <%= @accounts.size %> Accounts gefunden.  

<%= form_tag :action => "showAccounts" do %>
  <%= hidden_field_tag "accounts", @accounts %>
<%= submit_tag "Anzeigen" %>

<% end %>

我也可以将视图粘贴到需要此数组的位置,但我不认为它与此问题相关。我使用Rails 3.2.7和Ruby 1.9.2p0

2 个答案:

答案 0 :(得分:1)

如果您调试(@accounts),您将看到它传递的内容 - 类似于&lt;#0x7187237 Array&gt;这不是你想要的!

如果确实想要传入帐户数组,则需要将其序列化为文本格式以放入隐藏字段。如果@accounts很大,这可能是一大块数据。

也就是说,您可以将其转储到YAML或JSON,或者使用Ruby中的一个序列化函数,或者将其放入您自己的自定义文本格式(不推荐)。请记住,在使用之前需要在下一页上反序列化。

我假设想要将其传递到下一步的一部分是避免昂贵的LDAP请求。您可能希望查看放置轻量级缓存(例如redis)来临时存储请求。

答案 1 :(得分:1)

如果您想在不同的请求之间传递大量数据,我建议使用会话,它就是为此而设计的。