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. JSON语法2

    把 JSON 文本转换为 JavaScript 对象 JSON 最常见的用法之一,是从 web 服务器上读取 JSON 数据(作为文件或作为 HttpRequest),将 JSON 数据转换为 Jav ...

  2. Linux命令: 结束命令

    1)ctrl+c,退出命令 2)q,退出文件

  3. 浅谈为什么一个java源文件中只能有一个public类?

    声明,本篇文章为转载 转载 http://blog.csdn.net/bareheadzzq/article/details/6562211 最近在一个java文件中实现了几个类,其中一个声明为pub ...

  4. Hive 入门学习线路指导

    hive被大多数企业使用,学习它,利于自己掌握企业所使用的技术,这里从安装使用到概念.原理及如何使用遇到的问题,来讲解hive,希望对大家有所帮助. 此篇内容较多:看完之后需要达到的目标: 1.hiv ...

  5. python基础五--dict

    一.昨日内容回顾 1. 列表: 增 insert:按照指定下标插入 append:在列表最后增加 extend:迭代式的增加到列表的最后,相当于列表扩展 删 pop:根据指定下标删除,返回删除的元素, ...

  6. echart知识点、常用图形

    原文地址:https://www.cnblogs.com/kewenxin/p/9338272.html 本文是自己在项目中需要运用到的echarts图形进行整理,都有完整的代码.echarts原型, ...

  7. django multidb --- router

    之前一篇随笔, 提到了django中怎么使用多数据库, 但是在实际工程中遇到了一个问题,就是admin指定了使用某库, 在测试环境上没问题, 当部署后(库也变动了位置), 修改一个admin的mode ...

  8. 判断某个ImageView的背景图是否是已知的背景图相等

    if (ibtn.getDrawable().getConstantState().equals(getResources().getDrawable(R.mipmap.image).getConst ...

  9. Python3基础 try-指定except-as reason 捕获打开一个不存在的文件的时候,会产生OSError异常的示例

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  10. C简介与环境配置

    C 语言是一种通用的高级语言,最初是由丹尼斯·里奇在贝尔实验室为开发 UNIX 操作系统而设计的.C 语言最开始是于 1972 年在 DEC PDP-11 计算机上被首次实现. 在 1978 年,布莱 ...