【问题标题】:How do variables work together in a Rails MVC application变量如何在 Rails MVC 应用程序中协同工作
【发布时间】:2013-01-01 12:55:52
【问题描述】:

我正在阅读 RailsTutorial,它是这样的: 在我们添加的 routes.rb 文件中:

resources   :users
  • 然后在 app/views/users/show.html.erb 文件中我们使用@user
  • 然后在 app/controllers/users_controller.rb 我们仍然可以使用@user
  • 然后在 app/views/users/show.html.erb 再次我们可以使用@user

那么这些不是都在不同的文件夹和类中吗?所以@user 是公开的?他们如何看待和合作?因为我对 Rails 没有深入的了解,所以这一切对我来说都像是魔法。如果有人能对正在发生的事情的内部情况有所了解,那就太好了。

【问题讨论】:

标签: ruby-on-rails


【解决方案1】:

您问题中的用户并不完全相同:

  • 在 routes.rb 中,users 不是@users / @user 变量,而是一个名为:users 的符号。它可以是其他任何东西,:something, :anything 等等。它只是“resources”方法的一个参数,它根据传递给它的名称创建路由。因此,如果您编写“resources :whatever”,那么 Rails 将为名为 WhatController 的类生成默认路由 - 如果存在,它将起作用
  • show.html 是一个视图。它可以使用在它的控制器/动作中声明的任何成员变量(即 users_controller)。但它不是全局的,如果你有两个控制器,它们只能使用自己的变量。更重要的是,一个控制器中的两个不同的操作(方法)不能使用彼此的变量,因为它们当时没有被声明。
  • 在 users_controller.rb 中,您实际上声明了视图中使用的 @users 变量

【讨论】:

    【解决方案2】:

    请求首先触及您的 routes.rb 文件,该文件会将请求定向到适当的控制器操作。

    例如。 example.com/users/new 将转到 UsersController 的新操作

    新操作将定义实例变量,然后您可以在相应视图(用户文件夹中的 new.html.erb)中访问这些变量。

    resource :users 是创建 CRUD 路由的 Rails 快捷方式 (http://guides.rubyonrails.org/routing.html#resources-on-the-web)

    每个控制器操作很可能会对@user 实例变量进行不同的分配。阅读这个例子,http://www.tutorialspoint.com/ruby-on-rails/rails-controllers.html

    更多好读物: http://www.devarticles.com/c/a/Ruby-on-Rails/Rails-Action-Controller/1/

    【讨论】:

      【解决方案3】:

      @ 表示一个实例变量。变量的范围定义了可以在何处以及如何访问它。一般来说,您最好了解变量及其各种类型。看看这个:http://ruby.runpaint.org/variables

      【讨论】:

        猜你喜欢
        • 2011-04-16
        • 1970-01-01
        • 2010-09-28
        • 1970-01-01
        • 2015-12-07
        • 1970-01-01
        • 2013-04-18
        • 1970-01-01
        • 2016-06-12
        相关资源
        最近更新 更多