Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.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 RubyonRails 3教程第8章:用户控制器实现_Ruby On Rails - Fatal编程技术网

Ruby on rails RubyonRails 3教程第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,您正在内存中创建一个模型,用于生成填充新用户视

我在这本书的第8章中,我们试图通过“新建”和“创建”操作来实现示例应用程序的注册功能。以下是我关于这两种方法/行动的问题

“新”操作/方法在用户控制器中定义如下

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])