0

我有一个带有 getAccounts 函数的控制器,我在其中查找某些帐户。我的想法是首先显示结果的数量,然后将结果数组发送到下一个名为 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

4

2 回答 2

1

如果你调试(@accounts) 你会看到它通过了什么——像 <#0x7187237 Array> 这不是你想要的!

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

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

我假设希望将其传递到下一步的部分原因是避免昂贵的 LDAP 请求。您可能希望考虑放入一个轻量级缓存(例如 redis)来临时存储请求。

于 2012-08-27T13:16:45.533 回答
1

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

于 2012-08-27T13:44:26.370 回答