我一直在研究多个rails教程,但我不明白为什么方法new
和方法create
都有
@example = Example.new
new
方法在所有此控制器操作完成后呈现@example = Example.new
时,new
方法有什么意义?
答案 0 :(得分:0)
@example = Example.new意思是准备表单,以便用户可以填写表单中的数据,@ example的实例将保存该值。
@example = Example.new意味着创建新对象以将数据保存到数据库中,通常创建@ examle.save,这将保存从new传递的数据(通过参数)
答案 1 :(得分:0)
在Rails' REST new和create的实现方式不同。
HTTP GET to / resources / new旨在呈现一个适合创建新资源的表单,它通过调用控制器中的新操作来完成,该操作创建一个新的未保存记录并呈现表单。
对/ resources的HTTP POST获取作为新操作的一部分创建的记录,并将其传递给控制器中的create操作,然后控制器尝试将其保存到数据库中。
关于create的Ruby on Rails文档:
create(attributes = nil){| object | ...}
如果验证通过,则创建一个对象(或多个对象)并将其保存到数据库。无论对象是否已成功保存到数据库,都会返回结果对象。
关于new的Ruby on Rails文档:
new(attributes = nil){| self if block_given?| ...}
可以将新对象实例化为空(传递无构造参数)或使用属性预先设置但尚未保存(传递具有与关联表列名匹配的键名的哈希)。在这两种情况下,有效的属性键由关联表的列名确定 - 因此您不能拥有不属于表列的属性。
因此create
实例化新对象,验证它,然后将其保存到数据库中。 new
仅创建本地对象,但不会尝试验证或将其保存到数据库。
答案 2 :(得分:0)
当所有这些控制器操作都是为了渲染新页面时,@ method = Example.new的新方法有什么意义呢?
因为它使用@example
对象的属性呈现页面。
您可能假设在新初始化的对象上,所有属性的值都为nil。情况不一定如此,因为模型中的代码(例如after_initialize
回调或enum
)可能会提供默认值。
在某些情况下,控制器代码本身也可能提供默认值,无论是从当前用户推断还是通过参数传入。
答案 3 :(得分:0)
您将采用Sub Worksheet_Change(ByVal Target As Range)
Set MyPlage = Range("L3:L200")
For Each cell In MyPlage
Select Case cell.Value
Case Is = "Yes"
cell.Interior.ColorIndex = 10
Case Is = "No"
cell.Interior.ColorIndex = 6
Case Else
cell.Interior.ColorIndex = xlNone
End Select
Next
End Sub
这样的方法:
create
请注意,当保存返回def create
@example = Example.new(example_params)
if @example.save
redirect_to @example
else
render 'new'
end
end
时,create
操作render
内部将被使用,而不是redirect_to
。使用false
方法,以便在呈现时将render
对象传递回新模板。
您需要告诉用户出现问题。为此,您需要修改app / views / examples / new.html.erb以检查错误消息:
@example
我们检查<% if @example.errors.any? %>
<div id="error_explanation">
...
</div>
<% end %>
是否有任何错误,在这种情况下,我们会显示@example.errors.any?
所有错误的列表。
原因 @example.errors.full_messages
中@example = Example.new
为何{1}}在我们的视图中ExamplesController
为@example
,并且调用nil
会抛出错误。