Clueless关于Rails ...请揭开如何在控制器视图和模型中使用变量的神秘面纱

use*_*087 3 ruby model-view-controller ruby-on-rails

我是新来的红宝石和铁杆中的总菜鸟.在阅读了Michael Hartl的教程之后,我的脑袋正在旋转着octothorps,黄瓜和BDD.

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

需要帮助理解基本的Rails概念,即使在阅读本书之后,它也不会点击:

  1. 我以为我知道如何在模型,视图和控制器中使用darn实例变量,但是当我使用它们时,事情就不起作用了.我需要规则,我可以在何处以及如何使用它们.我有点如何使用从控制器到视图的实例变量.但模型控制器? - 无能为力.
  2. 在模型中的方法,为什么它们需要是方法?我可以创建变量并在我的控制器和视图中使用它们吗?这部分是如何工作的.
  3. 嗯,有点像第一个问题..模型和控制器中的变量用法...... ??

Bra*_*rth 5

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

  1. 视图中可以使用控制器中设置的实例变量.模型只能访问已直接传递给Class或实例的变量.这意味着如果您有一个@first_name变量,在您的控制器或视图中,您将无法在模型中看到它.如果你想在你的模式中使用它,你就必须做一些这样MyModelName.new( :first_name => @first_name )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. 排序与1和2的答案相同...;)模型中设置的变量(但不是常量)必须通过控制器和视图中可用的方法公开.从没有明确提供的模型中看不到任何东西.否则,在视图,控制器,帮助器等之间,几乎任何带有@(或@@)前面的东西都是可见的,而任何变量都没有.

  • 另一件事:查看[Skinny Controller,Fat Model](http://weblog.jamisbuck.org/2006/10/18/skinny-controller-fat-model),获取有关开始分解视图,控制器和楷模. (3认同)
  • 此外,挂在那里,它需要很多 - 它将开始点击,及时. (2认同)