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

时间:2012-10-12 03:45:46

标签: ruby-on-rails ruby model-view-controller

我是新来的红宝石和铁杆中的总菜鸟。在阅读了迈克尔·哈特尔的教程之后,我的脑袋正在用octothorps,黄瓜和BDD旋转。

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

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

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

2 个答案:

答案 0 :(得分: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. Sorta与1和2的答案相同......;)模型中设置的变量(但不是常量)必须通过控制器和视图中可用的方法公开。从没有明确提供的模型中看不到任何东西。否则,在视图,控制器,帮助器等之间,几乎任何前面有@(或@@)的东西都是可见的,而任何变量都没有。

    < / LI>

答案 1 :(得分:1)

嘿,首先关闭 - 慢下来,你不需要看黄瓜和BDD了。如果我正在学习rails,我的第一步就是Code School上的交互式Rails For Zombies教程

当你从那里建立时,你需要健康剂量的Railscasts

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

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