为什么我在控制器中的两个方法中创建一个新的模型对象?

时间:2016-05-29 10:22:22

标签: ruby-on-rails forms ruby-on-rails-4 crud

在互联网的各个部分之后,我有以下代码:

控制器

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中调用它?

2 个答案:

答案 0 :(得分:2)

在视图中使用在新方法中创建的Study实例来呈现HTML。

当HTML被发送到浏览器时,Study的实例不再存在 - 它从未保存过,而且只是为了帮助呈现HTML而创建的。

当从浏览器提交表单时,会传入参数以将值分配给要创建的实例,但首先必须创建一个新的Study实例来分配它们。

然后保存此实例。

答案 1 :(得分:1)

在新方法中使用Study.new创建新对象时,它用于在保存和呈现新表单之前创建新记录。之后,当您在create方法中使用Study.new(study_params)时,它将根据表单提交的值构建对象,数据将保存在数据库表中。