Ruby on rails RubyonRails 3教程第8章:用户控制器实现
我在这本书的第8章中,我们试图通过“新建”和“创建”操作来实现示例应用程序的注册功能。以下是我关于这两种方法/行动的问题 “新”操作/方法在用户控制器中定义如下Ruby on rails RubyonRails 3教程第8章:用户控制器实现,ruby-on-rails,Ruby On Rails,我在这本书的第8章中,我们试图通过“新建”和“创建”操作来实现示例应用程序的注册功能。以下是我关于这两种方法/行动的问题 “新”操作/方法在用户控制器中定义如下 class UsersController < ApplicationController . . . def new @user = User.new @title = "Sign up" end end 结束“ 感谢第一次调用User.new,您正在内存中创建一个模型,用于生成填充新用户视
class UsersController < ApplicationController
.
.
.
def new
@user = User.new
@title = "Sign up"
end
end
结束“
感谢第一次调用User.new,您正在内存中创建一个模型,用于生成填充新用户视图的字段。然后,该html页面将返回到客户端,服务器将忘记所有内容。当客户端填写表单并将其提交回服务器时,会在co上调用create方法controller。控制器要做的第一件事是创建一个新的用户模型,并用参数填充它。在此之前,没有保存任何内容,这就是为什么如果您在erb视图上使用实现,新方法会被调用两次。
这将使用@user对象将字段与对象属性相关联。 此字段将作为键值对传递
<%= form_for @user do |u| %>
<%= f.text_field :name %><br />
<%= f.text_field :age %><br />
<%= f.submit %>
<% end %>
提交表单后,请求参数通过键作为用户对象属性传递给。新操作中的第一个新操作需要获取一个空对象,该对象稍后在视图中的用户表单中使用,以便Rails表单助手可以确定表单对象并获取Rails需要aut的信息手动设置表单的所有默认值(如UserController的默认url)。有了这些信息,表单和页面就会呈现出来,Rails就会忘记它。(如果模型有一些属性的默认值,这些属性也会被设置,并且会出现在表单中)
现在,您的浏览器中有了表单,请填写值并提交。此提交由“创建”操作处理,第二个新操作将创建一个对象,并用从表单提交的值填充该对象,该值现在在params哈希中可用。此对象将有值,@user.save调用将它们保存到数据库(如果有)s验证(结果为真)。如果出现错误,如必填字段中缺少数据,则保存将失败,并且“新建”视图中的表单将再次呈现。这一次使用创建的对象中的数据,因此所有有效数据将填充到输入字段中。感谢您的回复,如果我实现下面的创建方法,我将删除e第二次呼叫new,这是错误的。如果是,有什么错误?[code][code]def create
code
if@user.save#处理成功的保存。else@title=“注册“render'new'end感谢您的回复,请再次回答我的问题。我已对其进行了编辑。这将不起作用,因为@user为nil且未初始化。create方法代表创建带有已发布参数的新用户对象。您删除的命令就是这样做的。它使用请求参数中的值创建了一个新的用户模型对象,然后保存到数据库中。感谢您的回复,请再次回答问题。我已对其进行了编辑。
def create
if @user.save
# Handle a successful save.
else
@title = "Sign up"
render 'new'
end
<%= form_for @user do |u| %>
<%= f.text_field :name %><br />
<%= f.text_field :age %><br />
<%= f.submit %>
<% end %>
@user = User.new(params[:user])