Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 控制器操作new和create使用相同的新方法有什么意义?_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 控制器操作new和create使用相同的新方法有什么意义?

Ruby on rails 控制器操作new和create使用相同的新方法有什么意义?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我一直在编写几个rails教程,我不明白为什么方法new和方法create都有 @example = Example.new 当控制器的所有操作都是呈现新建页面时,新建方法具有@example=example.new的意义是什么 @example=example.new意思是准备表单,以便用户可以在表单中填写数据,@example instance将保留该值 创造 @example=example.new意味着创建新对象将数据保存到create@examle.save内的数据库中,这将保存从n

我一直在编写几个rails教程,我不明白为什么方法
new
和方法
create
都有

@example = Example.new
当控制器的所有操作都是呈现
新建
页面时,
新建
方法具有
@example=example.new
的意义是什么 @example=example.new意思是准备表单,以便用户可以在表单中填写数据,@example instance将保留该值

创造 @example=example.new意味着创建新对象将数据保存到create@examle.save内的数据库中,这将保存从new(通过参数)传递的数据。

new @example=example.new意思是准备表单,以便用户可以在表单中填写数据,@example instance将保留该值

创造
@example=example.new意味着创建新对象将数据保存到create内的数据库通常是@examle.save,这将保存从new(通过参数)传递的数据。在Rails的REST new和create实现中,这些数据将被区别对待

HTTP GET to/resources/new旨在呈现一个适合创建新资源的表单,它通过在控制器内调用new操作来实现,该操作创建一个新的未保存记录并呈现表单

HTTP POST to/resources获取作为新操作的一部分创建的记录,并将其传递给控制器内的create操作,然后控制器尝试将其保存到数据库

在Ruby on Rails文档中,关于:

创建(attributes=nil){|对象|……}

如果验证通过,则创建一个对象(或多个对象)并将其保存到数据库中。无论对象是否成功保存到数据库,都会返回结果对象

在Ruby on Rails文档中,关于:

新的(attributes=nil){如果给定块| | self?|…}

新对象可以实例化为空(不传递构造参数)或使用属性预设但尚未保存(传递具有与相关表列名匹配的键名的哈希)。在这两种情况下,有效的属性键都是由关联表的列名决定的,因此不能有不属于表列的属性


因此,
create
实例化新对象,对其进行验证,然后将其保存到数据库中。和
new
只创建本地对象,而不尝试验证或将其保存到数据库。

在Rails的REST new和create实现中,处理方式不同

HTTP GET to/resources/new旨在呈现一个适合创建新资源的表单,它通过在控制器内调用new操作来实现,该操作创建一个新的未保存记录并呈现表单

HTTP POST to/resources获取作为新操作的一部分创建的记录,并将其传递给控制器内的create操作,然后控制器尝试将其保存到数据库

在Ruby on Rails文档中,关于:

创建(attributes=nil){|对象|……}

如果验证通过,则创建一个对象(或多个对象)并将其保存到数据库中。无论对象是否成功保存到数据库,都会返回结果对象

在Ruby on Rails文档中,关于:

新的(attributes=nil){如果给定块| | self?|…}

新对象可以实例化为空(不传递构造参数)或使用属性预设但尚未保存(传递具有与相关表列名匹配的键名的哈希)。在这两种情况下,有效的属性键都是由关联表的列名决定的,因此不能有不属于表列的属性

因此,
create
实例化新对象,对其进行验证,然后将其保存到数据库中。和
new
仅创建本地对象,而不尝试验证或将其保存到数据库

当控制器的所有操作都是呈现新页面时,新方法有@example=example.new的意义是什么

因为它使用
@example
对象的属性呈现页面

您可能假设在新初始化的对象上,所有属性的值都为nil。不一定是这样,因为模型中的代码(例如,初始化后的
回调,或
枚举
)可能提供默认值

在某些情况下,控制器代码本身也可能提供默认值,从当前用户推断或通过参数传入

当控制器的所有操作都是呈现新页面时,新方法有@example=example.new的意义是什么

因为它使用
@example
对象的属性呈现页面

您可能假设在新初始化的对象上,所有属性的值都为nil。不一定是这样,因为模型中的代码(例如,初始化后的
回调,或
枚举
)可能提供默认值


在某些情况下,控制器代码本身也可能提供默认值,可以从当前用户推断,也可以通过参数传入。

您将拥有如下方法:

def create
  @example = Example.new(example_params)

  if @example.save
    redirect_to @example
  else
    render 'new'
  end
end
注意,在
create
操作中,当save返回
false
时,将使用
render
而不是
redirect\u to
。使用
render
方法,以便在渲染时将
@example
对象传递回新模板

您需要告诉用户出了问题。为此,您将修改app/views/examples/new.html.erb以检查错误消息:

<% if @example.errors.any? %>
  <div id="error_explanation">
    ...
  </div>
<% end %>

...
我们检查是否有