Rails 3 与 Rails 4 中 try 方法的不同

转载 2016年06月01日 11:16:11

Rails 最新版本中,在使用 try 调用私有方法的时候,有了一些差异

class User
  include Mongoid::Document

  private
  def say
    puts "hello, world"
  end
end

Rails 3:

  u = User.new
  u.try(:say)
  ==> hello, world

rails4:

  u = User.new
  u.try(:say)
  ==> nil

测试,Rails 3 中对象可以直接使用 try 调用私有方法,但是 Rails 4 中则不可以
我们来看看源代码

Rails 3.1 稳定版

def try(*a, &b)
  if a.empty? && block_given?
    yield self
  else
    __send__(*a, &b)
  end
end

Rails 4.1 稳定版

def try(*a, &b)
  if a.empty? && block_given?
    yield self
  else
    public_send(*a, &b) if respond_to?(a.first)
  end
end

主要差异在于 send 和 public_send, 如果你是个老手,肯定知道怎么回事了
send 是 Ruby 的内核方法,可以调用任意方法
public_send 则只能调用公有方法


拥抱 Rails 4 —— 详述 Rails 4 的新变化

Gist DetailRevisions22 Stars102 Forks21 Download GistClone this gistEmbed this gistLink to ...
  • dazhi_100
  • dazhi_100
  • 2014年05月18日 18:45
  • 4326

rails 中 几种动态 查询 的实现方式

转载 : http://alexehrnschwender.com/2013/10/dynamic-activerecord-querying-rails-4/ Dynamic A...
  • remote_roamer
  • remote_roamer
  • 2015年04月25日 13:35
  • 861

在rails中使用FusionCharts生成报表

集成charts(其实相当于Java中准备FusionCharts的lib): 把目录FusionChartsFree\Code\FusionCharts拷贝到ruby项目下的public目...
  • dazhi_100
  • dazhi_100
  • 2014年04月21日 17:17
  • 896

rails模块学习之Controller

控制器简单介绍 一个简单的控制器中的例子 Ruby代码   class SimpleController    def index     end   end   ...
  • qwbtc
  • qwbtc
  • 2016年04月28日 17:13
  • 1825

rails/ruby 查找类的方法

总所周知,rails作为很强大的web框架,rails的语言ruby里的类会有很多方法,甚至一个类中一些方法可以实现同样的效果,那么这么多方法怎么查到自己想要的方法呢? 2.1.1 :001 > A...
  • feigeswjtu
  • feigeswjtu
  • 2016年03月31日 22:30
  • 882

Rails中的增删改查

1.        rails中类与对象与SQL中表与行的关系 rails中提供了对象关系映射(ORM),将模型类映射至表,模型类的关联表名是类名小写后的复数形式,如类名Order,对应的表名为or...
  • dazhi_100
  • dazhi_100
  • 2013年07月25日 20:57
  • 4626

Redis在Rails中的应用实例

考虑用户之间的关注问题:比如,在微博中用户之间可以互相关注(follow),那么就有followers和followings,followings表示我关注的人,followers表示关注我的人。这种...
  • ppp8300885
  • ppp8300885
  • 2016年11月02日 15:53
  • 1491

Rails 路由详解

首页 | Ruby on Rails China | Rails 教程中文版 | Fork me in Github | Ruby China 社区 | Documentation | ...
  • wanghaoming100
  • wanghaoming100
  • 2013年05月19日 01:14
  • 1598

rails启动过程(一)代码流程概述

前言 Rails 3中出现了很多新的名词,如Railtie,engine,application等,这些都和Rails的启动过程及gem的开发密切相关,由于好奇,想尝试分析整个Rails 3的启动过...
  • tomwang1013
  • tomwang1013
  • 2013年03月12日 08:32
  • 4464

Rails Model验证及自定义验证

自定义验证: 可以自定义validate(), 这个方法在每次保存数据时都会被调用. 如: 代码   def validate   if name.blank? && ...
  • u010365598
  • u010365598
  • 2014年07月02日 15:44
  • 1105
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Rails 3 与 Rails 4 中 try 方法的不同
举报原因:
原因补充:

(最多只允许输入30个字)