当前位置: 首页 > 文档资料 > Ruby on Rails 教程 >

9.6 练习

优质
小牛编辑
126浏览
2023-12-01

电子书中有练习的答案,如果想阅读参考答案,请购买电子书

避免练习和正文冲突的方法参见3.6 节中的说明。

  1. 编写一个测试,确保友好转向只会在首次登录后转向指定的地址,以后再登录都会转向默认地址(即资料页面)。提示:把这个测试添加到代码清单 9.26 中,检查 session[:forwarding_url] 中是否保存了正确的值。

  2. 编写一个集成测试,测试布局中的所有链接,以及登录后和登录前应该看到哪些链接。提示:把这个测试添加到代码清单 5.25 中,使用 log_in_as 辅助方法。

  3. 参照代码清单 9.59,直接向 update 动作发送 PATCH 请求,确认无法修改 admin 属性。为了确保测试写得正确,首先应该把 admin 添加到允许修改的参数列表 user_params 中,所以在此之前测试组件无法通过。

  4. 使用代码清单 9.60 中的局部视图重构 new.html.erbedit.html.erb 视图中的表单,重构后的代码如代码清单 9.61代码清单 9.62 所示。注意这里使用 provide 方法(3.4.3 节用过)避免布局中有重复。[12]

代码清单 9.59:测试禁止修改 admin 属性

test/controllers/users_controller_test.rb

require 'test_helper'

class UsersControllerTest < ActionController::TestCase

  def setup
    @user       = users(:michael)
    @other_user = users(:archer)
  end
  .
  .
  .
  test "should redirect update when logged in as wrong user" do
    log_in_as(@other_user)
    patch :update, id: @user, user: { name: @user.name, email: @user.email }
    assert_redirected_to root_url
  end

 test "should not allow the admin attribute to be edited via the web" do log_in_as(@other_user) assert_not @other_user.admin? patch :update, id: @other_user, user: { password:              FILL_IN, password_confirmation: FILL_IN, admin: FILL_IN } assert_not @other_user.FILL_IN.admin? end  .
  .
  .
end
代码清单 9.60:newedit 视图中使用的表单局部视图

app/views/users/_form.html.erb

<%= form_for(@user) do |f| %>
  <%= render 'shared/error_messages', object: @user %>

  <%= f.label :name %>
  <%= f.text_field :name, class: 'form-control' %>

  <%= f.label :email %>
  <%= f.email_field :email, class: 'form-control' %>

  <%= f.label :password %>
  <%= f.password_field :password, class: 'form-control' %>

  <%= f.label :password_confirmation %>
  <%= f.password_field :password_confirmation, class: 'form-control' %>

  <%= f.submit yield(:button_text), class: "btn btn-primary" %>
<% end %>
代码清单 9.61:使用局部视图的注册页面视图

app/views/users/new.html.erb

<% provide(:title, 'Sign up') %>
<% provide(:button_text, 'Create my account') %>
<h1>Sign up</h1>
<div class="row">
 <div class="col-md-6 col-md-offset-3">
  <%= render 'form' %>
 </div>
</div>
代码清单 9.62:使用局部视图的编辑页面视图

app/views/users/edit.html.erb

<% provide(:title, 'Edit user') %>
<% provide(:button_text, 'Save changes') %>
<h1>Update your profile</h1>
<div class="row">
 <div class="col-md-6 col-md-offset-3">
  <%= render 'form' %>
 <div class="gravatar_edit">
  <%= gravatar_for @user %>
 <a href="http://gravatar.com/emails" target="_blank">Change</a>
 </div>
 </div>
</div>

最后更新:

类似资料

  • 因为世人都犯了罪,亏缺了神的荣耀。如今却蒙神的恩典,因基督耶稣的救赎,就白白的称义。神设立耶稣作挽回祭,是凭着耶稣的血,藉着人的信,要显明神的义。因为他用忍耐的心,宽容人先时所犯的罪。好在今时显明他的义,使人知道自己为义,也称信耶稣的人为义。(ROAMNS 3:23-26) 练习 有学习者问:“看完你的教程,我可以达到什么水平?” 我无语。 同样小学、中学甚至大学,同班同学读同一本书,天天由同一个

  • 练习 对实验报告的要求: 基于markdown格式来完成,以文本方式为主 填写各个基本练习中要求完成的报告内容 完成实验后,请分析ucore_lab中提供的参考答案,并请在实验报告中说明你的实现与参考答案的区别 列出你认为本实验中重要的知识点,以及与对应的OS原理中的知识点,并简要说明你对二者的含义,关系,差异等方面的理解(也可能出现实验中的知识点没有对应的原理知识点) 列出你认为OS原理中很重要

  • 练习 对实验报告的要求: 基于markdown格式来完成,以文本方式为主 填写各个基本练习中要求完成的报告内容 完成实验后,请分析ucore_lab中提供的参考答案,并请在实验报告中说明你的实现与参考答案的区别 列出你认为本实验中重要的知识点,以及与对应的OS原理中的知识点,并简要说明你对二者的含义,关系,差异等方面的理解(也可能出现实验中的知识点没有对应的原理知识点) 列出你认为OS原理中很重要

  • 练习 对实验报告的要求: 基于markdown格式来完成,以文本方式为主 填写各个基本练习中要求完成的报告内容 完成实验后,请分析ucore_lab中提供的参考答案,并请在实验报告中说明你的实现与参考答案的区别 列出你认为本实验中重要的知识点,以及与对应的OS原理中的知识点,并简要说明你对二者的含义,关系,差异等方面的理解(也可能出现实验中的知识点没有对应的原理知识点) 列出你认为OS原理中很重要

  • 练习 对实验报告的要求: 基于markdown格式来完成,以文本方式为主 填写各个基本练习中要求完成的报告内容 完成实验后,请分析ucore_lab中提供的参考答案,并请在实验报告中说明你的实现与参考答案的区别 列出你认为本实验中重要的知识点,以及与对应的OS原理中的知识点,并简要说明你对二者的含义,关系,差异等方面的理解(也可能出现实验中的知识点没有对应的原理知识点) 列出你认为OS原理中很重要

  • 练习 对实验报告的要求: 基于markdown格式来完成,以文本方式为主 填写各个基本练习中要求完成的报告内容 完成实验后,请分析ucore_lab中提供的参考答案,并请在实验报告中说明你的实现与参考答案的区别 列出你认为本实验中重要的知识点,以及与对应的OS原理中的知识点,并简要说明你对二者的含义,关系,差异等方面的理解(也可能出现实验中的知识点没有对应的原理知识点) 列出你认为OS原理中很重要