2015-10-18 109 views
2

我到处搜索试图找到解释如何工作/它的目的是什么,但我找不到任何有用的。 我正在做Michael Hartl的教程,我的问题主要是关于两个操作:'新'和'创建'。 新的动作有以下几点:Ruby on Rails中User.new的解释? (从迈克尔哈特尔的教程)

def new 
    @user = User.new 
end 

,在对应于“新”行动的看法,有一个的form_for助手,用户可以键入他们的属性和点击提交。正如所料,辅助性的form_for的开头是这样的: 的form_for(@user)

但是这里是我难倒...在创建一个动作,有以下代码:

def create 
    @user = User.new(user_params) 
    #user_params is a function we defined which simply returns the permitted params from the user. 

“新”行动中@user = User.new的目的是什么? User.new甚至完成了什么?我假设实例变量@user必须传递给表单,但在这种情况下,为什么我们必须在'create'中重新声明@user isntance变量?在我们的“创建”操作中仅仅拥有@user = User.new(user_params)是不够的吗? User.new是否有必要使表单正常工作?

我主要是想弄清楚@user = User.new在我们的'new'动作及其相应的'new'视图(带有形式)中完成了什么,以及为什么当我们创建'create '实际上是创建对象的动作。任何帮助都非常赞赏。谢谢大家一直尽力解释。提前感谢任何回答此问题的人。

回答

1

这就是所谓的object orientated programming

enter image description here


HTTP

在Ruby中,每个定义变量是一个对象。然后在应用程序的每个实例中操纵这些对象。

在传统的(stateful)应用程序,您的计算机能够存储许多对象在内存中,由于您的应用程序始终处于状态,你就可以从一个单一的调用操作它们。

在HTTP(stateless)应用程序中,您必须在每次调用时重建对象。由于您的应用程序不会保留每个请求之间的状态(内存),因此您必须再次构建对象。

这就是为什么Rails的 “变量” 被称为与模型(类)类函数:User.find ...

-

因此,使用以下时:

#app/controllers/your_controller.rb 
class YourController < ApplicationController 
    def new 
     @user = User.new #-> invokes a new user object 
    end 

    def create 
     @user = User.new user_params #-> invokes a new user object & populates with your params 
     @user.save #-> "saves" the new record 
    end 

    def show 
     @user = User.find params[:id] #-> stateless means you have to rebuild the object again 
    end 
end 

。 ..你正在做的是每次你的动作被调用时重建对象。

这是使用HTTP的缺陷之一 - 你的服务器是“愚蠢的”,不能保持请求之间的状态。虽然Rails在将它变成一个无缝过程方面做得非常出色,但如果你还没有掌握它的话,这可能很困难。

+0

好吧......我想我现在明白了,至少比我在提问之前做得更好。 Rich,我必须感谢你的回应。感谢您调整我的原始问题,我仍然在学习如何正确使用本网站。感谢您让编程社区对新人感到欢迎。 – Parker

+0

感谢您的友好的话!没问题,一旦你意识到许多基础知识,你会学得更快。当它开始受到伤害时,你不知道核心功能 –

2

新建和创建是不同的操作。当您获得新路线时,将调用新路线。当您发布到新路线时,会调用创建。因此,您必须以新的方式创建用户,以便他们在表单中可用。您必须在创建时使用表单内容创建用户,以便将其保存到数据库中。

你不能假设请求新会去同轨实例作为创建请求。在代理之后运行应用的多个实例是很常见的。

0

通常,用户输入数据,我们程序员类型传统上将其存储在关系数据库中。

这就产生了一个关系模型(即,表和行)和一个面向对象的一个​​(粗略,类和实例)之间的“阻抗”。

奥姆斯比如ActiveRecord帮助这个乏味的抽象得多,并以这种方式模型实例 - 比如那些我们正在创建中的控制器动作 - 服务于数据乐于助人的容器。

这让我们收集用户输入时容易代表视图模式,并结合输入持续时(基本CRUD)到属性建模。

的单独的控制器的动作仅代表过程这两个步骤,如任何基于Web的应用程序最终会讲HTTP。

这是真正的整体利益及成因Rails和类似的MVC框架,出生在关系数据库和服务器端渲染的时间。 (尽管他们越来越多地应对和适应现在包含文档/面向对象数据库和客户端脚本前端的环境。)

相关问题