《Agile Web Develop》这本书里面只是简单介绍了下Rails ,许多东西为什么,以及更多有趣的东西都没有提到。
看别人项目源码后,才觉得Rails 的内容还真不是一般多。而ruby 随意修改内核功能的特性,更导致代码阅读起来额外麻烦。甚至不需要include,直接继承基类后extend就可以在其他地方使用了 - -
with_scope :ActiveRecord::Base 很方便的函数,用在需要不定参数查找时特好用
class Article < ActiveRecord::Base
def self.create_with_scope
with_scope(:find => { :conditions => "blog_id = 1" }, :create => { :blog_id => 1 }) do
find(1) # => SELECT * from articles WHERE blog_id = 1 AND id = 1
a = create(1)
a.blog_id # => 1
end
end
end
模板渲染
一般情况下,模板中只有一个<yield>用来填充内容。如果有特殊需要,比如需要额外的css,js 可以添加额外的 <%=yield:name_space %>
然后在需要使用的地方:
<% content_for :name_space do %>
<!-- code you wanna place here-->
<%end%>
过滤私密信息:
经常会发生这种情况,测试的时候用户的登录名,密码都在日志里面一览无余。如果觉得良心不安,使用这个:
filter_parameter_logging :password
这样会将和password 有关的内容过滤掉。
调试:
controller : raise sth
viewer: debug sth
console : y sth
routes 里面 member 和 collection 的区别:
比如 map.resources :days,member =>{:today=>:get}
map.resources :days,collection =>{:today=>:get}
一开始以为两种方法一样,member生成的路径是 get_day_path(:id) ,而collection生成的是get_days_path
关于 form_for :
一开始对 scaffold 后生成的 form_for 很好奇,因为在 new, edit 里面居然是相同的代码,连路径都没有。
很困惑后,查看源码才知道原因。Rails代码封装的太恐怖了,首先它会判断 form_for 的变量是否是个 new_record?
如果后面没有路径它会根据变量的属性来确定是新建还是修改。