【问题标题】:How it's possible to send an array from one view to the next如何将数组从一个视图发送到下一个视图
【发布时间】:2012-08-27 13:05:26
【问题描述】:

我有一个带有 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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 谢谢,我尝试阅读有关会话的更多信息并以此建立解决方案。
    • 谢谢,这很容易。我也切换到了活跃的唱片店。
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 谢谢,我会经历这个。我暂时用一个全局数组来修复它,它存储了数组。然后另一个函数接受它并将其保存到一个新的实例变量中。
    • @user1458773 你有单线程服务器吗?否则全局数组根本不起作用(无论如何都是坏主意)。
    • 哦,是的,完全正确。我忘记了这个。首先,我将使用此解决方案来实现更多部分,但我还将阅读有关 session 的内容以更正确地解决此问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-06
    • 1970-01-01
    • 2019-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-11
    相关资源
    最近更新 更多