- 博客(137)
- 收藏
- 关注
转载 fetch()函数
你可能还想在 new 动作中限制允许传入的属性。不过此时无法再根键上调用 require 方法,因为此时根键还不存在:using fetch you can supply a default and usethe Strong Parameters API from there.params.fetch(:blog, {}).permit(:title, :author)fetch(key, *ar
2016-07-28 16:52:04
1489
转载 编写嵌套表单
很多程序已经复杂到在一个表单中编辑一个对象已经无法满足需求了。例如,创建 Person 对象时还想让用户在同一个表单中创建多个地址(家庭地址,工作地址,等等)。以后编辑这个 Person 时,还想让用户根据需要添加、删除或修改地址。9.1 设置模型Active Record 为此种需求在模型中提供了支持,通过 accepts_nested_attributes_for 方法实现:
2016-07-28 13:45:51
523
转载 理解参数命名约定
使用 fields_for 帮助方法也可创建类似的绑定,但不会生成 标签。在同一表单中编辑多个模型对象时经常使用 fields_for 方法。例如,有个 Person 模型,和 ContactDetail 模型关联,编写如下的表单可以同时创建两个模型的对象:form_for @person, url: {action: "create"}d
2016-07-28 11:42:10
504
转载 上传文件
程序中一个常见的任务是上传某种文件,可以是用户的照片,或者 CSV 文件包含要处理的数据。处理文件上传功能时有一点要特别注意,表单的编码必须设为 "multipart/form-data"。如果使用 form_for 生成上传文件的表单,Rails 会自动加入这个编码。如果使用 form_tag 就得自己设置,如下例所示。下面这两个表单都能用于上传文件:
2016-07-28 11:26:18
283
转载 使用日期和时间表单帮助方法
你可以选择不使用生成 HTML5 日期和时间输入框的帮助方法,而使用生成日期和时间选择列表的帮助方法。生成日期和时间选择列表的帮助方法和其他表单帮助方法有两个重要的不同点:日期和时间不在单个 input 元素中输入,而是每个时间单位都有各自的元素,因此在 params 中就没有单个值能表示完整的日期和时间;其他帮助方法通过 _tag 后缀区分是独立的帮助方法还是操作模型对象的帮助方
2016-07-28 11:16:32
1920
转载 关于 inverse_of 的困惑与探究
最近在使用 关联 的时候,由于一点手误遇到了些问题,于是花了一下午时间来仔细读了 Guide 中关于 Active Record Associations 的部分。在看到 inverse_of 时,感觉自己突然一下就懵了。问题缘由我对 inverse_of 的困惑并不是在实际使用中产生的,即使不了解它也能在项目中愉快的玩耍,这似乎又旁证了 Rails 是一个很智能的框架。
2016-07-27 20:16:09
1049
转载 Ruby 中的类和对象
近在ruby-china中闲逛,无意中发现了一位网友提出的问题,这个问题相当有意思,并且促使我写下了这篇博客。原问题是这样描述的:class Object def do_it puts "do it" endendObject.do_it #这个class method 怎么来的?Object.new.do_it简单的几行代码,我竟一时答不上来,不禁汗颜!接触r
2016-07-27 19:55:02
686
原创 validates的条件验证(if)的Proc用法
实例:authentication.rb中# == Schema Information## Table name: authentications## id :integer not null, primary key# user_id :integer not null# provider
2016-07-27 18:26:40
719
转载 Ruby 中一些好用的方法(注意reduce方法)
#####injectinject是我使用最频繁的方法了,它的强大之处在于可以方便的对嵌套的数组,哈希等混合数据结构进行合并或求和, 可以有效减少代码量。例如最常见的数组套哈希:1234array = [{a:100}, {b:200}, {c:300}]array.inject(0) { |sum, e| sum += e.values.first } #600arr
2016-07-27 17:57:28
3248
原创 ruby中星号(*)的作用
1.有正常的乘法功能 3 * 4 == 12 # => true 2.数组*integer [1,2 ,[3 , [4 ,5]]] *2 = [1,2 ,[3 , [4 ,5]] , 1,2 ,[3 , [4 ,5]]] 3.字符串*integer "hello"*2 = "hellohello" 4.创建数组 *a = 1,3
2016-07-27 17:40:34
669
原创 rails 发邮件模板
rails发邮件模板不允许写css, 只能把css样式用style属性嵌套在html标签中实例register_complete.html.erb中(邮件html.erb模板):
2016-07-27 11:36:16
585
转载 Rails Respond Format 应用
现在摆在我面前有这样一个需求: 用户需要一个报表, 首先这个报表需要在网页上以 table 的形式展示, 然后用户可以将此报表以 CSV, Excel, PDF 的形式下载到本地, 最后用户还希望可以将报表转换为 JSON, XML 等数据以供其他程序使用。 这是一个很繁琐的需求,但是如果我们利用好 Rails 提供的 view 模版以及 respond_to 方法,我们可以很优雅的完成这个需求。
2016-07-26 15:24:05
1657
转载 rails中创建rake任务
在rails中,rake用来编写任务脚本,让我们在cli中可以执行,提供了良好的任务编写结构,并且方便执行相互依赖的任务rails项目中,rake文件存放位置:lib/tasks/user.rake1.without namespace:task :sayhi do puts "hi"end执行 rake sayhi 即可2.with namesp
2016-07-26 15:09:44
1004
转载 rails中的模型关联(进阶篇)
rails中的模型关联(进阶篇)http://www.xingishere.com/blogs/model_association总结了一些 rails 模型关联,有些可能不是很常见,但是会很有用,在这里和大家分享一下。1. has_many :throughhas_many 的用法大家可能都很熟悉,但是后面跟一个 `:through` 呢? has_many :t
2016-07-26 15:02:17
2071
转载 rails中的多态表关联
Rails: 搞懂多态(Polymorphic)关联关系http://www.wtoutiao.com/p/16f8ci7.html什么是多态Rails模型中的关系有一对一,一对多还有多对多,这些关联关系都比较直观,除此之外Rails还支持多态关联,所谓的多态关联其实可以概括为一个模型同时与多个其它模型之间发生一对多的关联。并且在实际的应用中这种关系也十分普遍,比如
2016-07-26 14:43:43
3261
转载 分页插件Kaminari
分页插件Kaminarihttp://www.xingishere.com/blogs/kaminari_gemRails 2.x 中最常用的分页插件是 will_paginate ,这个相信大家都耳熟能详不过到 Rails 3 以后,我发现一个更好选择,那就是 Kaminari我选择它,主要是看中其直观灵活的界面定制功能,它不像 will_paginate
2016-07-26 14:35:50
2239
转载 Rails中嵌套表单的解决
什么是嵌套表单呢?举个简单的例子吧,比如你有两个表,一个User表,另一个Account表,他们是一对一的关系(也可以一对多等)。现在需要提交一个表单的时候同时提交User,Account对应的字段数据。在Rails中有一种简单的方法解决,分别使用了这些方法accepts_nested_attributes_for attr_accessiblefields_for下面我们用代码进
2016-07-26 14:17:54
1879
原创 controller中request变量的用法
Request信息收集在Controller的Action之中,Rails提供了一些方法可以让你得知此request各种信息,包括:· action_name 目前的Action名称· cookies Cookie下述· headers HTTP标头· params 包含用户所有传进来的参数Hash,这是最常使用的信息
2016-07-26 13:04:16
2270
原创 Ruby中 respond_to? 和 send 的用法 .
如同其他的OO语言一样,在ruby中,通过给对象发送消息,来完成对象的功能,比如 str.upcase ,就是给str发送upcase的消息,点操作符(.),就是用来给对象发送消息的,str接受到消息,然后执行与消息对应的功能。 但是,某些时候,我们并不知道对象能响应哪些消息,比如下面的代码就会产生错误 obj = Object.new obj.talk undefined
2016-07-26 11:08:40
424
原创 js闭包
function add() { var counter = 0; counter += 1;}add();add();add();// 本意是想输出 3, 但事与愿违,输出的都是 1 !var add = (function () { var counter = 0; return function () {retu
2016-07-25 16:37:43
157
转载 to_param()函数和parameterize()函数
to_param() Link Returns a string representing the object’s key suitable for use in URLs, or nil if persisted? is false.class Person < ActiveRecord::Base endperson = Person.create person.to_param # =
2016-07-25 12:01:38
689
转载 redis发布与订阅
redis在2.8.0版本之后出了一个新功能,叫Pub/Sub,也叫"发布与订阅"。在这篇文章中不仅要介绍它是如何用的,更重要的是要介绍它的应用场景。在之前介绍websocket之用tubesock在rails实现聊天室(五)的时候,就用redis的pub/sub实现过聊天室。相关的代码是这样的:redis_thread = Thread.new do Redis.new.
2016-07-23 16:36:08
1883
原创 ruby的redo和retry 回顾
123456ary=[1,2,3]ary.each do |i| puts i i+=1 redo if i==2end#输出:<span class="number">1 2 2 3 redo做的动作是:条件满足,则以当前的条件
2016-07-23 16:22:11
492
原创 carriewave 根据一个 url 来保存图片
try = 0begin user.remote_avatar_url = 'http://domain/a.jpg'rescue Exception => e try += 1 retry if try < 3end
2016-07-23 16:17:01
232
原创 constantize()函数
constantize()Linkconstantize tries to find a declared constant with the name specified in the string. It raises a NameError when the name is not in CamelCase or is not initialized. See ActiveS
2016-07-23 15:50:36
3250
转载 Redis实现自动输入完成
1. 介绍当我们在京东商城的搜索框,输入想要搜索的内容,比如你想要搜索"热水瓶",刚输入一个"热"字,就会出现一个下拉框,列出了很多以"热"字开头的可供选择的条目,比如"热水器"、"热水袋"、”热水瓶"等,如下图所示:这种技术就叫做自动输入完成,当输入想要搜索的首字符或其中被包含的字符时,就会出现可供选择的条目,用户可以选择其中的条目来完成此次搜索,避免了用
2016-07-23 11:59:25
1634
转载 redis实现消息队列
1. 介绍redis有一个数据类型叫list(列表),它的每个子元素都是 string 类型的双向链表。我们可以通过 push,pop 操作从链表的头部或者尾部添加删除元素。这使得 list 既可以用作栈,也可以用作队列。假如,我们有一个队列系统,把一个个任务放到队列中,另一个进程就把队列中的任务取出来执行。放到队列我们使用LPUSH,也就是往双向链表的尾部填充一个元素,这
2016-07-23 11:48:18
369
转载 redis实现cache系统实践(二)
1. 介绍rails中就自带有cache功能,不过它默认是用文件来存储数据的。我们要改为使用redis来存储。而且我们也需要把sessions也存放到redis中。关于rails实现cache功能的源码可见于这几处:https://github.com/rails/rails/blob/master/activesupport/lib/active_support/cache.rb
2016-07-23 11:39:45
2491
转载 redis实现cache系统原理(一)
1. 介绍cache就是人们所说的缓存。我们这里所说的cache是web上的。对用户来说,衡量一个网站是否具有良好的体验,其中一个标准就是响应速度的快慢。可能网站刚上线,功能还较少,数据库的记录也不多的情况下,网站可能访问速度比较快,也不需要优化。但是随着网站发展起来,功能越来越多,数据库越来越大的时候,这个时候可能网站的访问速度就会下降。无论网站刚上线初期还是到一定程度的情况,我们都希望
2016-07-23 11:25:45
2270
转载 Rails 用 RJS 简单有效的实现页面局部刷新
我们时常在做项目的时候会遇到这样的需求,页面上有个基本数据的下拉框,用于选择一些数据,如:项目版本号、联系人、收件地址、银行账号列表什么的。而需求可能会要求说可以在这个页面随时增加那些下拉框的选择值,而不是另开窗口。于是我们可能需要实现一个浮动窗口,里面包含新增表单,实现表单 AJAX 提交,最后在刷新主窗口的下拉菜单控件。这里介绍一下我最近实现的一个简单方式:主表
2016-07-16 15:43:01
2292
转载 ActiveJob + sidekiq做异步执行任务
初探ActiveJob简介ActiveJob 是 Rails 4.2 新加入的功能。这个东西在beta阶段rubyChina就已经有很多高手关注了,无奈自己的项目使用的是4.1.5,升级到4.2 的时候其他gem又有很多依赖有问题,所以没在第一时间使用。今天补个课。ActiveJob 是Rails自己开发运行后台程序的模块,常用于执行运行时间可能很长的工作(比如发送注册邮件
2016-07-16 10:04:01
2670
转载 整合 ElasticSearch 到现有 Rails 项目
导言这两天项目要求,把现有的搜索改成ElasticSearch(后面简称es)。之前接触 过一些es,后来就开始捣鼓。记得railcasts上面有讲过相关视频,重温了下就 开始弄,没弄多久发现上面用的tire已经retire了。为了让更多的朋友们不走冤枉路,所以才有了此文。简介大致说下什么是es,详细的Wikipedia有介绍。es其实就是一个搜索的引擎,从开源项目luce
2016-07-15 21:04:34
1840
原创 friendly_id应用实践
destination.rb表中(由字段slug): extend FriendlyId friendly_id :slug_candidates, use: :slugged def slug_candidates [ :name_en, [:name_en, :country_code], [:name_en, :cou
2016-07-15 20:51:31
361
原创 to_param和Gem: friendly_id构造合适的url
!!!!!!!to_params: to_param()Link Returns a string representing the object’s key suitable for use in URLs, or nil if persisted? is false.class Person < ActiveRecord::Base endperson = Person.create p
2016-07-15 18:14:43
534
转载 使用 Chinese_pinyin + Friendly_id 为中文标题生成 Slug
在许多项目中,我们可能都会遇到需要为数据生成 slug 的场景,这些场景类似于:基于商品名称生成 slug基于文章标题生成 slug至于为什么需要生成 slug,而不是使用比如 Rails 中默认自增的主键也就是数据的 id,原因其实很简单:使用自增 id 容易暴露数据,比如通过订单 id 可能导致遍历所有订单,不信,你看这里就有个例子增加 UR
2016-07-15 17:44:15
650
转载 rails AJAX方法 操作后需要执行js文件中命令的方法
form_for 方法协助编写表单,可指定 :remote 选项,用法如下:form_for(@post, remote: true)do|f| %> ...end %>生成的 HTML 如下:formaccept-c
2016-07-15 16:19:22
337
转载 render collection渲染集合
渲染集合时使用局部视图特别方便。通过 :collection 选项把集合传给局部视图时,会把集合中每个元素套入局部视图渲染:h1>Productsh1>render partial: "product", collection: @products%>p>Pr
2016-07-14 14:38:33
514
转载 插入视频 音频 链接
3.1.5 使用 video_tag 链接视频video_tag 帮助方法为指定的文件生成 HTML5 标签。默认情况下,视频文件存放在 public/videos 文件夹中。video_tag "movie.ogg"%>生成的代码如下:video
2016-07-14 14:33:29
1089
转载 布局中的yield
在布局中,yield 标明一个区域,渲染的视图会插入这里。最简单的情况是只有一个 yield,此时渲染的整个视图都会插入这个区域:html> head> head> body> yield %> body>html>布局中可以标明多个区域:
2016-07-14 14:32:37
372
转载 render避免双重渲染错误
大多数 Rails 开发者迟早都会看到一个错误消息:Can only render or redirect once per action(动作只能渲染或重定向一次)。这个提示很烦人,也很容易修正。出现这个错误的原因是,没有理解 render 的工作原理。例如,下面的代码会导致这个错误:defshow @book= Book
2016-07-14 14:17:28
1435
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅