3

我是 ruby​​ 的新手,而且完全是个菜鸟。在阅读了 Michael Hartl 的教程后,我的头被章鱼、黄瓜和 BDD 所震撼。

我有使用 Archaic Java 和丑陋的 jsp/servlet 进行服务器端开发的经验。我想变酷并学习rails。

需要帮助理解基本的 Rails 概念,即使阅读了这本书,它也只是不点击:

  1. 我以为我知道如何在模型、视图和控制器中使用该死的实例变量,但是当我使用它们时,事情就不起作用了。我需要关于我可以在哪里使用它们、何时以及如何使用它们的规则。我有点了解如何使用从控制器到视图的实例变量。但是模型到控制器?- 毫无头绪。
  2. 模型中的方法,为什么它们需要是方法?我可以只创建变量并在我的控制器和视图中使用它们吗?那部分是如何工作的。
  3. 嗯,有点像第一个问题.. 模型和控制器中的变量使用... ??
4

2 回答 2

5

在我们回答您的问题之前,首先要记住的是,所有变量,无论范围如何,都仅对当前请求有效。您可以将配置值用于持久性,但全局将在请求结束时过期,与实例变量相同。

  1. 在控制器中设置的实例变量可用于视图。模型只能访问直接传递给类或实例的变量。这意味着如果您@first_name在控制器或视图中有变量,您将无法在模型中看到它。如果您想在模型中使用它,则必须执行类似MyModelName.new( :first_name => @first_name )or的操作an_instance_of_my_modelname.some_method_i_have_added( @first_name )

  2. 它们本身不一定是方法,但几乎可以肯定它们最终会成为方法。您在模型中最典型的“变量”使用将是属性。模型上的属性可用于模型的实例,无论它是否在视图、控制器、助手或任何位置。属性通过在幕后基本上定义一个 setter 和一个 getter 方法来工作(一个属性first_name将使方法first_name()first_name=())。这些方法甚至可以在模型中被覆盖,以在插入或从数据库中删除之前操作值。您可以使用http://apidock.com/ruby/Module/attr_accessor在没有数据库的情况下实现类似的效果。类方法的作用域相同,但作用于类,而不是特定的实例。

  3. Sorta the same as the answers for 1 and 2... ;) Variables (but not constants) set in models must be exposed via a method to be available in the controllers and views. Nothing can be seen from a model that was not supplied explicitly. Otherwise, between the views, controllers, helpers, and whatnot, pretty much anything with an @ (or @@) in front of it is visible, and any variables without are not.

于 2012-10-12T04:11:17.267 回答
1

呵呵,首先——慢点,你还不需要看黄瓜和BDD。如果我正在学习 Rails,我的第一步将是Code School的交互式 Rails For Zombies 教程

当您从那里构建时,您将需要健康剂量的Railscasts

我认为 Rails for Zombies 将回答您的基本问题,但通常您将实例变量加载到控制器中(从模型中),并在您的视图中访问它们以创建显示的页面。

HTH,祝你好运,欢迎来到酷人群:)

于 2012-10-12T03:52:49.970 回答