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 %>

この配列が必要な場所にビューを貼り付けることもできますが、この質問には関係ないと思います。Rails3.2.7とRuby1.9.2p0を使用しています

4

2 に答える 2

1

デバッグ (@accounts) すると、渡されたものが表示されます - <#0x7187237 Array> のようなものは、あなたが望むものではありません!

アカウント配列を本当に渡したい場合は、それをテキスト形式にシリアル化して隠しフィールドに入れる必要があります。@accounts が大きい場合でも、これはおそらく膨大な量のデータになるでしょう。

つまり、YAML または JSON にダンプするか、Ruby のシリアル化関数の 1 つを使用するか、独自のカスタム テキスト形式にすることができます (推奨されません)。使用する前に、次のページでデシリアライズする必要があることに注意してください。

それを次のステップに渡したい理由の一部は、高価な LDAP リクエストを避けるためだと思います。要求を一時的に保存するために、軽量のキャッシュ (redis など) を配置することを検討することをお勧めします。

于 2012-08-27T13:16:45.533 に答える
1

個別のリクエスト間で大量のデータを渡したい場合は、セッションを使用することをお勧めします。これは、そのようなことのために設計されています。

于 2012-08-27T13:44:26.370 に答える