免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3159 | 回复: 3
打印 上一主题 下一主题

看rails3源码的一些疑问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-01-06 10:50 |只看该作者 |倒序浏览
在nested_attributes.rb有一段没有理解

Ruby代码
  1. existing_records = if association.loaded?   
  2.   association.to_a   
  3. else  
  4.   attribute_ids = attributes_collection.map { |a| a['id'] || a[:id] }.compact   
  5.   attribute_ids.present? ? association.all(:conditions => {association.primary_key => attribute_ids}) : [ ]   
  6. end  
复制代码
这里的为什么会有else情况存在,而且如果是else情况的我觉得整个代码就有问题了,得到的不是期望的结果。



同样这个文件里有REJECT_ALL_BLANK_PROC = proc { |attributes| attributes.all? { |_, value| value.blank? } }

这里的下划线_是什么意思?



第三个问题就是active_support中有一个Concern的类,里面有个方法叫append_features的方法,这个方法是什么时候调用的?

论坛徽章:
0
2 [报告]
发表于 2011-01-06 16:02 |只看该作者
本帖最后由 bugbugbug3 于 2011-01-06 16:03 编辑

Rails的源码没怎么看过。不过我可以说说的第二个关于下划线的问题。
在ruby中,下划线"_" 是标识符的合法组成部分。而且下划线"_"本身就是一个合法的标识符。
如:
  1. _ = "Hello,Ruby!"

  2. p _
复制代码
一般来说,如果你不关心某个变量的名称,可以用"_" 。如:
  1. a = ["name","2011"]
  2. _,year = a

  3. p year
复制代码
在这里,我不关心name,只关心把数组a中的年份。

一句话! “_” 和 其他变量一样。

论坛徽章:
0
3 [报告]
发表于 2011-01-06 16:14 |只看该作者
回复 2# bugbugbug3


    3Q,非常3Q!

论坛徽章:
0
4 [报告]
发表于 2011-01-10 22:13 |只看该作者
看activesupport里面的dependencies.rb这个文件

append_features就是简化了module在被include的时候哪些作为class method,哪些作为instance method的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP