<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>lhy20062008 (lhy)</title>
    <link>https://ruby-china.org/lhy20062008</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>Ruby 可以跳本类的方法执行父类的同名方法吗？</title>
      <description>&lt;p&gt;问题描述：有两个类 A，B,A 是 B 的子类，两个类中都有方法 a，A 的实例如何直接调用 B 中的 a 方法？&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;B&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;a&lt;/span&gt;
        &lt;span class="s1"&gt;'b'&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;A&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;B&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;a&lt;/span&gt;
        &lt;span class="s1"&gt;'a'&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A.new.a  =&amp;gt; a
我想让 A.new.a 返回 b，但又不改变 A 中 a 的实现，能做到吗？&lt;/p&gt;</description>
      <author>lhy20062008</author>
      <pubDate>Sat, 28 Feb 2015 17:49:44 +0800</pubDate>
      <link>https://ruby-china.org/topics/24397</link>
      <guid>https://ruby-china.org/topics/24397</guid>
    </item>
    <item>
      <title>link_to 方法的小瑕疵</title>
      <description>&lt;p&gt;今天在做项目的时候，发现 link_to 对传入 nil 和""参数的处理不同。
假设当前页面路径为'admin/test'
那么，当参数为 nil 时，得到的结果为：
&amp;lt;%=  link_to nil, nil %&amp;gt;
&lt;a href="admin/test"&gt;admin/test&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;当参数为""时，
&amp;lt;%= link_to '', '' %&amp;gt;
&lt;a href=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;另看 rails 相关源码，对于可能出现 nil 的情况，可以使用以下方式：
&amp;lt;%= link_to_if(condition, name, url) %&amp;gt;
当 condition 为 true，才生成一个 a 标签&lt;/p&gt;

&lt;p&gt;追加：
当使用 link_to_if 方法时候，一定要慎用，不然会出问题，比如：
&amp;lt;%= link_to_if(post.source.present? post.source.name, admin_post_source_path(post.source) %&amp;gt;
当 post.source 为 nil 时，会继续执行 post.source.name 代码，此时就会报 no method 错误。&lt;/p&gt;</description>
      <author>lhy20062008</author>
      <pubDate>Mon, 15 Sep 2014 14:54:03 +0800</pubDate>
      <link>https://ruby-china.org/topics/21534</link>
      <guid>https://ruby-china.org/topics/21534</guid>
    </item>
    <item>
      <title>rails 中 as_json 的一些技巧</title>
      <description>&lt;p&gt;as_json 是 Array 的方法，在 rails 中可以直接这样使用：
user 包括以下字段：name, age
users = User.first(10)
users.as_json
当然也可以在 user.rb 中复写 as_json 方法：
def as_json
{name: name + "end", age:  age + 1}
end
这样，得到得就是新的值了；&lt;/p&gt;

&lt;p&gt;甚至还可以对分组的 users 调用上面定义的 as_json
users = users.group_by{|user| age &amp;gt; 18}
users.as_json will get the result :
{
"true": [{name: 'dd', age: 29},{name: 'ddd',age: 23}],
"false": [{name: 'dd', age: 12}, {name: 'dddd', age: 11}]
}
这样可以大大简化代码&lt;/p&gt;</description>
      <author>lhy20062008</author>
      <pubDate>Wed, 02 Jul 2014 15:50:23 +0800</pubDate>
      <link>https://ruby-china.org/topics/20277</link>
      <guid>https://ruby-china.org/topics/20277</guid>
    </item>
    <item>
      <title>Rails 源码笔记</title>
      <description>&lt;p&gt;最近由于工作需要，只能通过阅读 rails 源码来解决遇到的问题，特记录如下：（若有不正确的地方，还望各位大神提出来，并多多指导小弟）
先说说问题吧：
1、同一个项目需要将原有数据库拆分成两个不同的数据库，而且能需要保证不同数据库的各使用一个相同的链接，由于我们两项目都需要做这样的拆分，且项目 A 是 rails 3.2 版本，项目 B 是 rails 2 版本，因此遇到了问题：
rails 3 拆分之后，通过 include 就可以访问新的数据库，而在项目 B 中，只有最先访问的表访问的是新的数据库，其他表访问的是之前的数据库（这里先约定之前的数据库有拆分出来的数据库的所有表）
解决方式：
通过查看 rails2 和 rails3 的源码，发现有以下区别：
rails 3:
通过 connection_pools 保存数据库连接池，为 hash，每个数据库连接池用数据库配置 spec 作为关键字，并通过实例变量 class_pools 保存每个模型对应的链接，为 hash，关键字为模型名 name，值 connection_pools[spec]，这样就能保证同一个数据库的模型用的是同一个链接，且与其他数据库不一样；
如：connection_pools[spec] = connection，class_pools[name1] = class_pools[name2] = connection&lt;/p&gt;

&lt;p&gt;rails2：
通过 connection_pools 保存数据库连接池，为 hash，每个数据库连接池用模型名 name 作为关键字，而且如果是不同的模型，就会 new 一个新的链接，导致每个模型使用的是不同的链接，如：connection_pools[name1] = connection1，connection_pools[name2] = connection2&lt;/p&gt;

&lt;p&gt;模型查找链接的方式：
先通过模型名在 class_pools 中查找，如果找到即返回，否则查询其父类的链接，一般情况下 ActiviteRecord：：Base 都会有一个默认的链接；&lt;/p&gt;

&lt;p&gt;因此 rails2 中提供了一种方式解决该问题：在新数据库创立链接，并使其中所有模型都继承该 base_model，这样所有模型都用 base_model 的链接。&lt;/p&gt;

&lt;p&gt;但是由于领导要求不采用这种方式（主要是这种继承关系很牵强，没有实际的意义），反复研究，终于让我找到了另一种方式，就是模仿 rails3
在新的数据库连接创立的时候记录一个类变量，并且只要创建一次就不再创建，每个模型 include 这些代码，并对每个模型维持一个 hash 值：connetion[name_n] = (@@connection ||=(create connection))
这样处理之后，每次模型区查找链接的时候都会在 connection_pools 中查找到@@connection，而且该数据库下每个模型都是使用的一个链接，问题得到结局。&lt;/p&gt;

&lt;p&gt;ps：带着问题去阅读源码是一个不错的学习方式&lt;/p&gt;</description>
      <author>lhy20062008</author>
      <pubDate>Mon, 31 Mar 2014 00:25:36 +0800</pubDate>
      <link>https://ruby-china.org/topics/18267</link>
      <guid>https://ruby-china.org/topics/18267</guid>
    </item>
    <item>
      <title>the different between class and module</title>
      <description>&lt;p&gt;class：
1、可以被实例化
2、用于创建对象
3、父类 module
4、成员包括：方法，常量，变量
5、方法包括：实例方法，类方法
6、可以被继承
7、不能 extend&lt;/p&gt;

&lt;p&gt;module:
1、不能实例化
2、用于提供可重用方法，提供命名空间
3、父类 object
4、成员包括：方法，常量，类
5、方法包括：实例方法，module 方法
6、不能被继承，只能通过 include 被类和 module 引用
7、可以 extend&lt;/p&gt;</description>
      <author>lhy20062008</author>
      <pubDate>Wed, 26 Mar 2014 20:00:35 +0800</pubDate>
      <link>https://ruby-china.org/topics/18192</link>
      <guid>https://ruby-china.org/topics/18192</guid>
    </item>
    <item>
      <title>rails delete 和 delete_all 方法注意</title>
      <description>&lt;p&gt;在 rails 中，最近发现删除一个 record 有 2 中情况：
1、直接从数据库删除
  User.where(id: 1).delete_all，产生的 sql 语句类似这样：
delete from users where id = 1
2、删除关联关系，不删除数据
A.first.users.delete_all 产生的 sql 语句如下：
update from users set a_id = 0 where a_id = 1
以上 sql 有误，暂时如吃，请大家多多指正批评。&lt;/p&gt;</description>
      <author>lhy20062008</author>
      <pubDate>Wed, 05 Mar 2014 15:47:40 +0800</pubDate>
      <link>https://ruby-china.org/topics/17677</link>
      <guid>https://ruby-china.org/topics/17677</guid>
    </item>
  </channel>
</rss>
