- 博客(30)
- 收藏
- 关注
原创 ActionController::Base#render源码解析
提出问题:为什么要研究这个?在日常开发中controller中的render用的很多,或者说大部分用法都知道这么用,但是我好奇这个render到底做了什么,要不然用起来总感觉缺了点什么,下面就来尝试研究下源码。先前准备: welcome_controller.rbclass WelcomeController < Application`这里写代码片`Controller def inde
2017-07-31 23:06:00
422
原创 ActiveRecord 的数据三种预加载形式 - includes, preload, eager_load和joins(不是预加载)
引言:在平常的ActiveRecord的开发中使用sql语句方式有很多,那么ActiveRecord有没有提供我们一些便利的方式来实现这个魔法,其实有的,想知道详情请向下看。当然在开始之前我们准备下数据:class Province < ActiveRecord::Base has_many :cities has_many :viliagesendclass City < Active
2017-07-23 01:17:13
1500
原创 ActiveSupport eager_autoload源码分析
eager_autoload加载方式在一些开发中很是常见,先举个例子:module MyClass extend ActiveSupport::Autoload eager_autoload do autoload :Cache endend使用场景中可以直接在 App 启动的时候执行:MyClass.eager_load!在production环境下,我们只需在config.r
2017-07-22 16:51:27
380
原创 ActiveSupport autoload源码分析
在我们平常看一些gem或者开发中autoload用的还是很多的,闲的没事总结下这个方法的内部实现,分析一下源码。在我们看源码的时候经常看到如下代码:module ActiveRecord extend ActiveSupport::Autoload autoload :Attribute autoload :Base autoload :Callbacks autoload :Co
2017-07-22 15:35:07
424
原创 module 和 class 和 def (作用域门)
作用域门: 在ruby中有三个门,Module门, Class门, def门,这里的门就是作用域的门。 看下面代码:a1 = 1class A //作用域门:进入Class门 a2 = 2 p local_variables def hello //作用域门:进入def门 a
2017-07-16 16:27:50
864
原创 instance_eval(instance_exec) 和 class_eval(class_exec)
instance_evalBasicObject.public_methods.grep /instance_eval/ => [:instance_eval] BasicObject.instance_methods.grep /instance_eval/ => [:instance_eval] 从上面的方法我们可以发现,instance_eval 是实例方法也是类方法,所以实例和类都可
2017-07-16 15:55:24
461
原创 ruby Singleton Class和Singleton Method
也许你经常听说singleton class,但是并没有搞清楚它到底是什么,为啥呢,就我查的,概念太绕。绕了半天也不知道咋回事,所以要总结下呢,咳咳。首先我们要搞明白一个问题,管他是不是单例类,所以我们先搞明白一个类中的作用域,先举个例子吧:class A p self class self p self end def hello
2017-07-11 23:52:26
1375
原创 ruby 用block来创建hash
创建hash的方式有很多种,下面用block来创建下hash, 一般不太常用,小小总结下吧:看如下代码:hash = Hash.new {|hash, key| hash[key] = [] }hash[:one] << "Angelababy" => {:one=>["Angelababy"]}hash[:two] << "天霸动霸tua" {:one=>["Angelababy"],
2017-07-11 17:23:19
340
原创 ruby block & proc & lambda
列表内容一、什么是ruby中的block? Block是一个统称,中文名称又叫闭包,英文是Closure,表现形式有block, Proc and lambda。Proc是对block的面向对象的封装, lambda是对Proc的进一步封装。block书写方式 大括号+代码 { p ‘hi’} do … end,也是代码块二、block 虽然Ruby中万物皆对象,但block是作
2017-07-11 00:01:34
423
原创 rails 代码组织
Rails代码组织concerns目录lib目录Fat Modelconcerns目录controllers/concernsmodels/concernsconcerns目录是controller和model相同逻辑存储的地方lib目录放置通用业务或者非业务相关的代码Fat Model让controller轻量化把业务逻辑放在m
2017-04-11 18:49:37
286
原创 rails callback介绍
什么是Callback在增删改查的操作上添加的回调事件,在执行增删改查的时候同步触发一些逻辑回调触发分类creating an objectupdating an objectdestroying an objectfinding an objectCreate回调before_validationafter_validationbefore_savearound_sav
2017-04-11 17:43:07
455
原创 ruby重写java对URL短地址压缩算法微博短地址原理解析
java实现对URL短地址压缩算法public class ShortUrl { public static void main(String[] args) { String url = "http://www.sunchis.com"; for (String string : ShortText(url)) {
2017-04-07 15:54:51
581
原创 rails 中的迁移Migration
安装gemgem install activerecordrequire 'active_record'Migrations作用采用Ruby DSL的方式来管理数据库的设计模式通用RDB模式管理,方便在不同数据库之前使用支持版本管理和团队协作支持数据库rollbackMigrations使用rails g modelrails g migrationrake db:mig
2017-04-05 17:36:35
1148
原创 rails 中的模型验证validate
Validations的使用安装gemgem install activemodelrequire 'active_model'这样就可以使用这个gem包中内部的方法呢举个例子如下:class User < ActiveRecord::Base validates :username, presence: { message: "用户名不能为空" } validates :username,
2017-04-05 16:30:09
1912
原创 Rails中scopes的几种使用方法
不传参数使用scope方法class User scope :finduser, {where(status: 'username')} scope :has_content, {joins(:comment).where("comments.content is not null")}end 传参数使用scope方法class User scope :finduser,
2017-04-05 15:28:40
713
原创 rails model自定义属性技巧
model自定义属性model不存在属性自定义class Blog def one_string= tagstags.split(",").each do |tag|one_tag = find_by (title: tag)one_tag = Tag.new(title: tag) unless one_tagself.tags endendend
2017-03-30 15:57:47
1621
原创 n+1次查询
#includes这个方法主要是防止一些数据进行多余查询使用的第一种方式: @blogs = Blog.page(params[:page] || 1).per_page(params[:per_page] || 10).order("id desc").where(is_public: true)测试效果如下:第二种方式:@blogs = Bl
2017-03-30 15:44:58
447
原创 Model 增删改查简单学习
查找 find(id) : 这个方法如果找到会返回这个对象,如果找不到会发生异常 find_by(id: 1) :这个方法如果找到会返回这个对象,如果找不发会返回nil find_by! : 这个方法同理find(id)方法 find_by_sql:如果找到这个对象会反正这个对象数组,如果没找打这个对象会返回空数组 where: 这个方法返回的是activerecord::
2017-03-30 15:39:34
365
原创 ruby map迭代简洁写法实现原理分析
主要介绍了ruby迭代map的简洁写法实现原理分析map简便的方法写法举个例子:现在有一个字符串数组,需要把其中的字符串都转化为大写array = ["first","second"]array.map(&:upcase)其实上面的写法等同于下面的写法array.map{|obj| obj.upcase}写法很简单,看看实现的原理&符号做了什么?1.触发p的to_proc方
2017-03-23 14:16:02
2051
原创 rails Model 多对多关系学习
介绍: model多对多关系,有两种方法可以实现,第一种是has_and_belongs_to_many,第二种是has_many,下面分别分析一下has_and_belongs_to_many使用场景:一个a模型有多个b模型,b模型同样也有多个a模型举个例子:一个博客有多个标签,一个标签也有多个博客,博客为blog模型,标签为tag模型,如何实现blog模型和tag模型的对应
2017-03-22 10:32:56
1011
原创 rails controller 简单学习
Controller规则app/controllers目录命名规则支持命名空间,以module的方式组织Controller使用class ApplicationController endclass UsersController endController中的实例方法paramssessioncookiesrender
2017-03-21 17:29:19
394
原创 rails Render和layout基础学习
render作用生成HTTP response渲染和解释子视图(sub-view)render methodin controllerin viewrender in controller修改action的查找view的行为,组建当前request的responsedef index# ...enddef search@use
2017-03-06 15:11:48
1218
原创 rails view简单学习
view原理ActionView: actionview gemActionController : actionpack gemactionview和actionpack都可以单独应用于任何ruby项目view的查找app/viewsview的分类Template: index.html.erbPartial: _user.html.erbLa
2017-03-06 14:53:44
414
原创 rails 管理员用户管理简单实现
路由: namespace :admin do root 'users#index' resources :users do collection do get 'search' end end endcontrollerdef index@users = User.page(params[:page] || 1).p
2017-03-06 14:27:15
1095
原创 rails 中will_paginate-bootstrap做分页
思路:will_paginate是一个做分页的gem,但是风格不太好看,使用will_paginate-bootstrap这个gem做一个带有bootstrap样式的分页Gemfile添加gemgem 'will_paginate-bootstrap'bundle install在controller中:@users = User.page(params[:pa
2017-03-03 15:23:39
480
原创 mac的mysql意外无法正常启动
sudo mysql.server start Password: Starting MySQL .. ERROR! The server quit without updating PID file (/usr/local/var/mysql/niuyufudeMacBook-Pro.local.pid). tail -n 100 /usr/local/v
2017-03-02 17:43:08
933
原创 ruby 处理图像
require 'mini_magick'img = MiniMagick::Image.open('/path/cartoon.jpg')查看图像的宽和长w,h = img[:width],img[:height]对图像进行压缩成特定大小 img = img.resize('1050x759')对图片中特定位置的图像进行裁剪# widt
2017-03-02 16:35:00
1496
原创 rails 实现登录和注册功能
用户注册需要user这个model, user控制器控制用户的注册功能,session控制器控制用户的登录功能,welcome控制器控制用户登录和退出的跳转,为了表单友好,增加bootstrap样式
2017-03-02 15:11:28
2450
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人