zoukankan      html  css  js  c++  java
  • Ruby on Rails Tutorial 第七章笔记 用户注册

     

    在这一章,作者从设置路由,设置动作开始,然后完善界面,进而创建了用户界面和用户注册界面两个界面.

    其中用到了一些 Rails 开发的核心的知识.

    第一个界面:用户界面——show.erb.html

    为了显示用户界面,首先应该有一个针对特定用户的路由,这个路由有具体的动作(最好能返回这个用户的信息),然后找到对应的视图(show.erb.html), 进而渲染界面.

    路由规则 & resource :users

    路由规则:以 id 为1的用户为例,其 url 为 /urer/1,发送的请求类型为 GET.
    因此,应该在路由文件中添加对应的路由, 

    由于 User 是一模型,因此只要可以通过在 config/routes.rb 中添加 resource :users 这行代码,就可以实现添加对应的路由了.

    resource :users 还有其他作用:

    1. 使 users/1 等一系列路由可以访问
    2. 为 User 资源提供、并与路由关联了所有动作,即 index, show, new, create, edit, update, destroy

    动作规则 & @user

    动作规则:显示用户界面的动作为 User 控制器的 show 动作.

    在 def show 动作中可以添加代码 @user = User.find(params[:id]) 来返回当前用户.

    视图:
    返回当前用户之后, 因为 @user 可以在所有视图中使用,因此可以在 app/views/show.html.erb 中利用 @user 的一系列属性,使用 Erb 来返回相应的值.

    第二个界面:注册界面——new.html.erb

    路由规则:由第一个界面中路由的配置,已经为注册界面配置了路由和相应的动作,即 /signup 和 new 动作.
    动作规则;由于是注册用户,所以应该在 def new 动作中添加代码 @user = User.new,实现创建用户.

    接下来应该让用户在视图中输入相关的信息,然后这些信息交给模型,使其保存在数据库中,实现这一功能的是 Rails 内置功能  form_for

    视图中的form_for

    格式:

    <%= form_for(@user) do |f| %>
    ...
    <%= f.label :password %>
    <%= f.password_filed :password %>
    ...
    <% end %>

    从外往里看:

    1. form_for 使得生成的字段元素可以用于设定 @user 对象的属性.
    2. f.label 用于设定对象属性的(名义上的)名称
    3. f.password_field用于产生 HTML 代码 input <id="user_password" name="user[password] type="password" /> 其中, id 用于 CSS, type 用于适应客户的设备的特征, name 则被 Rails 当作键,用户在其中的输入当作值,所有键值对用于构建一个名为 params 的散列,用于创建用户. 是真正发挥作用的地方.

    失败界面——render 'new'

    为了能够处理失败情况(用户输入的值无效的情况),则应该在 def new 中添加 if 分支语句, 如果失败,则重新渲染界面,即添加 else  render 'new' 语句.

    一旦用户输入无效的情况, form_for 将无效数据传递给模型之后,模型会产生 errors.full_messages 这一个数组,其中包含了出错的所有原因的字符串.

    为了出现出错的信息, 应该使用 Rails 的内置方法 @user.errors.full_messages 进行逐条输出.

    成功界面——redirect_to @user

    在 if 分支中,如果用户注册成功, 即 @user.save 返回值为 true, 那么应该执行 redirect_to user_url(@user),其可以简写成 redirect_to @user(Rails 会自动判断为 user_url(@user))

  • 相关阅读:
    org.hibernate.HibernateException: No Session found for current thread
    TCP/IP协议 HTTP协议
    [ERROR][org.springframework.web.context.ContextLoader][main] Context initialization failed org.sprin
    oracle 导出表结构和数据,使用plsql
    jar包里查找指定的class文件,排查是否存在或重复,工具软件:Java Class Finder
    maven手动安装jar到本地仓库
    The reference to entity “idNo” must end with the ';' delimiter 异常处理
    activeMQ下载,安装,启动,关闭
    Oracle错误:ORA-01033
    -Xms512m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m
  • 原文地址:https://www.cnblogs.com/FBsharl/p/11470011.html
Copyright © 2011-2022 走看看