Rails控制器中的实例和类变量

芬克斯

我是Rails和ruby的新手。我正在研究类和实例变量的概念。我了解其中的区别,但是当我尝试在导轨中使用控制器时,我感到困惑。我所做的是在类方法之外声明了一个类和实例变量:

class BooksController < ApplicationController
  # GET /books
  # GET /books.json

  @@world = "Hello World"
  @insworld = "my hobby"

  def index
    @books = Book.all
    binding.pry

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @books }
    end
  end

end

我的印象是@insworld的值是“我的爱好”,但是当我尝试查看@insworld的值时index method,@ insworld返回的值为nil。@@ world具有“ Hello World”的值。那这里怎么了 他们不是在同一个类中定义的吗?

阿吉斯

类也是Ruby中的对象,因此它们可以具有自己的实例变量,这些实例变量称为类实例变量

  • @@world是一个类变量
  • @insworld是一个类实例变量
  • #index 是一个实例方法

当您尝试访问@insworld#index,Ruby会在A对象(即A.new)中搜索实例变量,因为这#index是一个实例方法。

但是您将其定义@insworld类实例变量,这意味着它是在类对象本身中定义的(表示A)。

以下代码演示:

class Hi
  @@a = 1 # class variable
  @b  = 2 # class instance variable

  def initialize
    @c = 3 # instance variable
  end

  def test # instance method, works on objects of class Hi
    puts @@a # => 1
    puts @b  # => nil, there is no instance variable @b
    puts @c  # => 3 # we defined this instance variable in the initializer
  end
end

Hi.class_variables        # => @@a
Hi.instance_variables     # => @b
Hi.new.instance_variables # => @c
# Hi is an object of class Class
# Hi.new is an object of class Hi

请记住,所有实例变量nil如果不存在则返回

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Rails控制器中的实例和类变量

来自分类Dev

在 Rails 中为布局类实例变量选择控制器

来自分类Dev

Rails控制器中实例变量的范围是什么?

来自分类Dev

使用Ruby On Rails的控制器中的实例变量

来自分类Dev

Rails:在 rpec 测试中访问控制器实例变量

来自分类Dev

复制控制器类实例变量

来自分类Dev

Rails可以在控制器的实例方法中分配类变量吗?

来自分类Dev

Rails:哪个实例属于一个变量,该变量在控制器中定义?

来自分类Dev

在Rails控制器中封装实例变量?

来自分类Dev

在Rails的视图中循环访问控制器实例变量

来自分类Dev

Rails从相同的控制器实例变量调用create方法

来自分类Dev

使用控制器和Ruby在模型中设置实例变量值

来自分类Dev

为什么不能在Rails控制器中重新分配类变量

来自分类Dev

如何在控制器中测试实例变量?

来自分类Dev

RSpec-在控制器中测试实例变量

来自分类Dev

在子控制器中覆盖父控制器的实例变量

来自分类Dev

如何在Rails中跨控制器访问变量和方法

来自分类Dev

如何在Rails中跨控制器访问变量和方法

来自分类Dev

控制器内部的实例变量循环

来自分类Dev

如何使用Mocha在Rails控制器中模拟类

来自分类Dev

控制器中的变量

来自分类Dev

在控制器中创建模型实例为 id 和时间戳 Rails 6 返回 nil

来自分类Dev

控制器中的get和post方法。Ruby on Rails

来自分类Dev

在Rails视图和控制器中迭代记录

来自分类Dev

通过 AJAX 和控制器在 Rails 中渲染视图

来自分类Dev

子类化Devise控制器后,Rails视图中的实例变量为Nil

来自分类Dev

我可以防止Rails将实例变量从控制器传递到视图吗?

来自分类Dev

这种更改实例变量的方法是否属于我的Rails控制器或模型?

来自分类Dev

如何在控制器上的format.js之后使用实例变量或参数-Rails

Related 相关文章

  1. 1

    Rails控制器中的实例和类变量

  2. 2

    在 Rails 中为布局类实例变量选择控制器

  3. 3

    Rails控制器中实例变量的范围是什么?

  4. 4

    使用Ruby On Rails的控制器中的实例变量

  5. 5

    Rails:在 rpec 测试中访问控制器实例变量

  6. 6

    复制控制器类实例变量

  7. 7

    Rails可以在控制器的实例方法中分配类变量吗?

  8. 8

    Rails:哪个实例属于一个变量,该变量在控制器中定义?

  9. 9

    在Rails控制器中封装实例变量?

  10. 10

    在Rails的视图中循环访问控制器实例变量

  11. 11

    Rails从相同的控制器实例变量调用create方法

  12. 12

    使用控制器和Ruby在模型中设置实例变量值

  13. 13

    为什么不能在Rails控制器中重新分配类变量

  14. 14

    如何在控制器中测试实例变量?

  15. 15

    RSpec-在控制器中测试实例变量

  16. 16

    在子控制器中覆盖父控制器的实例变量

  17. 17

    如何在Rails中跨控制器访问变量和方法

  18. 18

    如何在Rails中跨控制器访问变量和方法

  19. 19

    控制器内部的实例变量循环

  20. 20

    如何使用Mocha在Rails控制器中模拟类

  21. 21

    控制器中的变量

  22. 22

    在控制器中创建模型实例为 id 和时间戳 Rails 6 返回 nil

  23. 23

    控制器中的get和post方法。Ruby on Rails

  24. 24

    在Rails视图和控制器中迭代记录

  25. 25

    通过 AJAX 和控制器在 Rails 中渲染视图

  26. 26

    子类化Devise控制器后,Rails视图中的实例变量为Nil

  27. 27

    我可以防止Rails将实例变量从控制器传递到视图吗?

  28. 28

    这种更改实例变量的方法是否属于我的Rails控制器或模型?

  29. 29

    如何在控制器上的format.js之后使用实例变量或参数-Rails

热门标签

归档