在互联网的各个部分之后,我有以下代码:
控制器
CMSampleBuffer
查看
class StudiesController < ApplicationController
def new
require_user
@study = Study.new
end
def create
@study = Study.new(study_params)
if @study.save
flash[:success] = "You made it!"
redirect_to root_path
else
flash[:danger] = "Uh oh—something went wrong"
redirect_to study_path
end
end
end
它有效,但我的问题是:为什么我需要两次调用<%= form_for(@study, url: {action: :create}, class: "study-form") do |f| %>
<%= f.text_field :title %><br>
<div class="btn-submit">
<%= f.submit "I studied today!", class: "btn btn-primary margin-top" %>
</div>
<%= end %>
?如果我已在Study.new
中调用它,为什么我会在create
中调用它?
答案 0 :(得分:2)
在视图中使用在新方法中创建的Study实例来呈现HTML。
当HTML被发送到浏览器时,Study的实例不再存在 - 它从未保存过,而且只是为了帮助呈现HTML而创建的。
当从浏览器提交表单时,会传入参数以将值分配给要创建的实例,但首先必须创建一个新的Study实例来分配它们。
然后保存此实例。
答案 1 :(得分:1)
在新方法中使用Study.new创建新对象时,它用于在保存和呈现新表单之前创建新记录。之后,当您在create方法中使用Study.new(study_params)时,它将根据表单提交的值构建对象,数据将保存在数据库表中。