web-dev-qa-db-ja.com

Ruby on Railsの@変数

@titletitleの違いは何ですか?どちらも変数名にすることができます。また、どのような変数を使うべきかをどうやって決めるのですか? @とか?

249
OneZero

titleはローカル変数です。それらはその範囲内にのみ存在します(現在のブロック)

@titleはインスタンス変数で、クラス内のすべてのメソッドで利用できます。

もっとここで読むことができます: http://strugglingwithruby.blogspot.dk/2010/03/variables.html

Ruby on Railsでは - あなたの変数をインスタンス変数(@title)としてあなたのコントローラの中で宣言することはそれらをあなたのビューに利用可能にします。

369
Peter Rasmussen

あなたの変数があなたのビューで利用できるようにしたい場合、あなたのコントローラで@titleを使用してください。

説明は、@titleはインスタンス変数、titleはローカル変数で、Railsはコントローラからのインスタンス変数をビューで利用できるようにします。これは、テンプレートコード(erb、hamlなど)が現在のコントローラインスタンスの範囲内で実行されるために発生します。

27
joscas

違いは変数の範囲です。 @versionはクラスインスタンスのすべてのメソッドで利用できます。

簡単に言えば、あなたがコントローラの中にいて、その変数をビューから利用できるようにする必要がある場合は、@variableを使います。

もっと長い答えについてはこれを試してみてください。 http://www.Ruby-doc.org/docs/ProgrammingRuby/html/tut_classes.html

25
GSP

@variablesはRubyではインスタンス変数と呼ばれています。つまり、クラス内の任意のメソッドでこれらの変数にアクセスできます。 [クラス内のすべてのメソッドにわたって]

@記号のない変数はローカル変数と呼ばれます。つまり、これらのローカル変数には、その宣言変数内でのみアクセスできます。ローカルスコープに限定されています。

インスタンス変数の例:

class Customer
  def initialize(id, name, addr)
    @cust_id = id
    @cust_name = name
    @cust_addr = addr
  end

  def display_details
    puts "Customer id #{@cust_id}"
    puts "Customer name #{@cust_name}"
    puts "Customer address #{@cust_addr}"
  end
end

上記の例では、@cust_id@cust_name@cust_addrはクラス内の別のメソッドでアクセスされます。しかし、同じことはローカル変数ではアクセスできません。

13
Prabhakar

ローカル変数は初期化のブロック内からのみアクセス可能です。ローカル変数も小文字(a-z)またはアンダースコア(_)で始まります。

インスタンス変数はselfのインスタンスで、@で始まります。インスタンス変数もオブジェクト自体に属します。インスタンス変数は.sendなどでメソッドを実行するものです。

例:

@user = User.all

@userはインスタンス変数です

そして、初期化されていないインスタンス変数はNilの値を持ちます。

4
Joe Hilton

変数スコープとは? に関するチュートリアルでは、詳細をよく説明しています。関連するものをここで囲んでください。


+------------------+----------------------+
| Name Begins With |    Variable Scope    |
+------------------+----------------------+
| $                | A global variable    |
| @                | An instance variable |
| [a-z] or _       | A local variable     |
| [A-Z]            | A constant           |
| @@               | A class variable     |
+------------------+----------------------+
3
Hearen

@変数はローカル変数ではなく、インスタンス変数です。

詳しくは http://Ruby.about.com/od/variables/a/Instance-Variables.htm をご覧ください。

1
John Beynon