1

我正在阅读 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 没有深入的了解,所以这一切对我来说都像是魔法。如果有人能对正在发生的事情的内部情况有所了解,那就太好了。

4

3 回答 3

1

请求首先触及您的 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/

于 2013-01-17T21:22:24.847 回答
1

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

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

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

于 2013-01-17T21:25:07.700 回答