天天看點

Rails Tricks #1

《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?

如果後面沒有路徑它會根據變量的屬性來确定是建立還是修改。