2

コントローラーに次のコードがあります。

class TestController < ApplicationController

@@a = 1

def index
    @temp = connection.execute("select test_id from mastertest limit #{@@a}, 5;")
end

そして、View(Html.erb) ファイルに次のコードがあります。

<button type="submit" value="Next" form="submit_form">NEXT</button>
<form id="submit_form">
<% @@a = @@a + 1 %>
    <table>
      <% @temp.each do |row| %>
        <tr><td><%= row[0] %></td></tr>
      <% end %>
    </table>
</form>

したがって、基本的には、[次へ] ボタンをクリックしてクラス変数 @@a の値を変更しようとしています。ただし、@@aa の値は変更されません。誰かがそれを行う方法を手伝ってもらえますか。

4

3 に答える 3

3

ヘルパーメソッドを使ってみましたか?

module ApplicationHelper
  @@a = 1
  def increment_a
     @@a = @@a + 1
  end
end

そしてあなたの見解ではただ電話してください。

<% increment_a %>

@@ 変数がクラス変数であり、そのクラスのすべてのインスタンス間で共有されるわけではありません。したがって、そのクラスを ApplicationHelper クラスのどこかに定義すると、共有され、コントローラーとビューでアクセスできるようになります。

すべての場合において、そのような方法でクラス変数を使用することは強くお勧めしません。ビュー/コントローラー間でデータ/変数を共有する別の方法を見つけることをお勧めします。別のサポート クラスを使用するか、データベースに値を格納してください。

于 2012-10-30T19:35:05.337 に答える
0

フォームの送信時に Rails の変数を変更したい場合は、フォームを処理するアクションにそのコードを配置する必要があります。

あなたが書いたように、フォームを含むテンプレートがレンダリングされるときに変数が設定されると思います。

また、Rails アプリのクラス変数に関して、いくつかの特別な考慮事項があることを漠然と思い出しました。それを調べて、予期しない結果を引き起こさない手法を使用していることを確認する必要があります。

于 2012-10-30T19:31:50.400 に答える
0

わかりました私はこれを修正することができました:

Ruby には、次のように宣言できるグローバル変数と呼ばれるものがあります。

$a = 1

どこでも $a を使用すると、コントローラーとビューでもその値が保持されます。

于 2012-10-30T19:32:42.463 に答える