params的理解和作用:

http://api.rubyonrails.org/classes/ActionController/Parameters.html#method-i-require

Allows you to choose which attributes should be whitelisted for mass updating and thus prevent accidentally exposing that which shouldn't be exposed. Provides two methods for this purpose: require and permit. The former is used to mark parameters as required. The latter is used to set the parameter as permitted and limit which attributes should be allowed for mass updating.

创建新的对象或更新对象属性时,进行白名单审查,把允许的属性放入白名单。


Active Record Associations

学习了belongs_to: 的细节

  1. 包括5个方法,
  2. options,
  3. 用lambda表达式设定想要关联的范围。You can use any of the standard querying methods inside the scope block.

http://api.rubyonrails.org/

Active Model Errors

Provides a modified Hash that you can include in your object for handling error messages and interacting with Action View helpers

给Person的实例对象增加一个实例变量(errors对象),errors对象用来存储和使用定义(add)的错误信息。

class Person
def initialize
@errors = ActiveModel::Errors.new(self)
end
attr_reader :errors
def validate!
errors.add(:name, :blank, message: "cannot be nil") if name.nil?
end
 add(attribute, message = :invalid, options = {})

attribute should be set to :base if the error is not directly associated with a single attribute.如果不是单个的属性设置一个弹出错误,就用:base替代。


ActionDispatch::Routing::PolymorphicRoutes

多态的路径

Polymorphic URL helpers are methods for smart resolution to a named route call when given an Active Record model instance. They are to be used in combination with ActionController::Resources.

Polymorphic URL helpers are used in a number of places throughout the Rails framework:

  • url_for, so you can use it with a record as the argument, e.g.url_for(@article);
  • redirect_to (which, in fact, uses url_for) so you can write redirect_to(post) in your controllers;
  • ActionView::Helpers::FormHelper uses polymorphic_path, so you can write form_for(@article) without having to specify :url parameter for the form action;

Prefixed polymorphic helpers  前缀的多态方法

In addition to polymorphic_url and polymorphic_path methods, a number of prefixed helpers are available as a shorthand to action(控制器动作): "..." in options. Those are:

  • edit_polymorphic_urledit_polymorphic_path

  • new_polymorphic_urlnew_polymorphic_path

Example usage:

edit_polymorphic_path(@post) 
# => "/posts/1/edit" 
polymorphic_path(@post, format: :pdf) 
# => "/posts/1.pdf"

Functionality 函数功能

# a Comment record
polymorphic_url(record) # same as comment_url(record)
# it recognizes new records and maps to the collection
record = Comment.new
polymorphic_url(record) # same as comments_url()
# the class of a record will also map to the collection
polymorphic_url(Comment) # same as comments_url()

ActionDispatch::Routing::UrlFor

In config/routes.rb you define URL-to-controller mappings, but the reverse is also possible: a URL can be generated from one of your routing definitions. URL generation functionality is centralized in this module.

URL从参数中生成:里面用到了UrlFor模块中的url_for()方法。

<%= link_to('Click here', controller: 'users',
action: 'new', message: 'Welcome!') %>
# => <a href="/users/new?message=Welcome%21">Click here</a>

URL从具名的路径中生成:

先在routes.rb中,生成具名的路径,resources :users

class User < ActiveRecord::Base
include Rails.application.routes.url_helpers
def base_uri
user_path(self)
end
end
User.find(1).base_uri # => "/users/1"

路由战争:product_path vs product_url

  • product_url得到完整URL,所以重定向用。如redirect_to,从一个域名到另一个域名。
  • product_path得到product/1的部分,用于生成链接link_to,或指定表单的动作。

3-29 params的理解; Active Model Errors; PolymorphicRoutes 多态的路径; ::Routing::UrlFor的更多相关文章

  1. 12月21日 简单理解Active Recore Callback, destroy_all和delete_all的区别。豆知识(alias),语言学习法(4核心)

    destroy_all and delete_all Destroy the records by instantiating each record and calling its #destroy ...

  2. java提高篇之理解java的三大特性——多态

    面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...

  3. 深入理解OOP(四): 多态和继承(抽象类)

    在本文中,我们讨论OOP中的热点之一:抽象类.抽象类在各个编程语言中概念是一致的,但是C#稍微有些不一样.本文中我们会通过代码来实现抽象类,并一一进行解析. 深入理解OOP(一):多态和继承(初期绑定 ...

  4. 【转】java提高篇之理解java的三大特性——多态

    面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...

  5. 理解oo:继承、多态、重写、重载、接口、抽象类

    1. 继承: 从多个子类中抽象出实例变量以及方法,形成更抽象的父类,避免在子类中的代码重复,维护起来更加方便.检查是否可以使用继承技术的方法是:IS A 对于类A继承自类B,类C继承自类A,那么类C和 ...

  6. 理解Spring MVC Model Attribute和Session Attribute

    作为一名 Java Web 应用开发者,你已经快速学习了 request(HttpServletRequest)和 session(HttpSession)作用域.在设计和构建 Java Web 应用 ...

  7. 【译】理解Spring MVC Model Attribute 和 Session Attribute

    作为一名 Java Web 应用开发者,你已经快速学习了 request(HttpServletRequest)和 session(HttpSession)作用域.在设计和构建 Java Web 应用 ...

  8. Rails-Treasure chest3 嵌套表单; Ransack(3900✨)用于模糊查询, ranked-model(800🌟)自订列表顺序; PaperTrail(5000✨)跟踪model's data,auditing and versioning.

    自订列表顺序, gem 'ranked-model' 多步骤表单 显示资料验证错误讯息 资料筛选和搜寻, gem 'ransack' (3900✨); 软删除和版本控制 数据汇出(csv), 自订列表 ...

  9. backbone库学习-model

    backbone库的结构: http://www.cnblogs.com/nuysoft/archive/2012/03/19/2404274.html 本文所有例子来自于http://blog.cs ...

随机推荐

  1. Python 运算符与基本数据类型

    一.运算符 1.算数运算: 2.比较运算: 3.赋值运算: 4.逻辑运算: 5.成员运算: 二.基本数据类型 1.空(None) 表示该值是一个空对象,空值是Python里一个特殊的值,用None表示 ...

  2. nodejs中req.body对请求参数的解析问题

    首先,先了解一下关于http协议里定义的四种常见数据的post方法,分别是: application/www-form-ulrencoded multipart/form-data applicati ...

  3. Linux基础命令---gzexe

    gzexe 压缩可执行文件,在执行程序的时候可以自动实现解压.此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedora. 1.语法       g ...

  4. leetcode_目录

    3Sum Closest 3Sum 4Sum Add Binary Add Two Numbers Anagrams Balanced Binary Tree Best Time to Buy and ...

  5. python之路----钻石继承

    钻石继承 继承顺序 class A(object): def test(self): print('from A') class B(A): def test(self): print('from B ...

  6. 根据wsdl文件,soupUI生成webservice客户端代码

    根据wsdl文件,soupUI生成webservice客户端代码 功能介绍: 对于面向WebServie接口开发时,当我们已经获取到WSDL文件后,可以使用soapUI工具生成对应的客户端和服务端代码 ...

  7. spring MVC @Resource不支持Lazy加载及解决方法

    今天迁一系统时发现有个bean使用@Resource注入了另外一个bean,这个被注入的bean是将被deprecated的类,而且只有一两个功能使用到,为了先调整进行测试,增加了@Lazy注解,启动 ...

  8. 03: MySQL基本操作

    MySQL其他篇 目录: 参考网站 1.1 MySQL 三种数据类型(数值,字符串,日期) 1.2 MySQL常用增删改查命令 1.3 删除,添加或修改表字段 1.4 MySQL外键关联(一对多) 1 ...

  9. 20145122《Java程序设计》第九周学习总结

    教材学习内容总结 1.JDBC代表Java数据库连接,这是一个标准的Java API与数据库无关的与Java编程语言之间的和大多数数据库连接.JDBC API支持两层和三层的处理模式对数据库的访问,但 ...

  10. bzoj 1010 玩具装箱toy -斜率优化

    P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1...N的N件玩具,第i件玩具 ...