《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?
如果後面沒有路徑它會根據變量的屬性來确定是建立還是修改。