首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络基础 >

ruby on rails 知识点(下)

2012-11-22 
ruby on rails 知识点(上)1.Controller中的公開(public)方法都是Action,也就是可以讓瀏覽器呼叫使用的動作

ruby on rails 知识点(上)
1.Controller中的公開(public)方法都是Action,也就是可以讓瀏覽器呼叫使用的動作。使用protected或private可以避免內部方法被當做Action使用。

2.def create
  @event = Event.new(params[:event])
  if @event.save
    redirect_to :action => :index
  else
    render :action => :new
  end 
  end
如果活動因為驗證錯誤而儲存失敗,這裡會回傳給使用者帶有錯誤訊息的new Action,好讓使用者可以修正問題再試一次。實際上,render :action => "new"會回傳new Action所使用的樣板,而不是執行new action這個方法。如果改成使用redirect_to會讓瀏覽器重新導向到new Action,但是如此一來@event就被重新建立而失去使用者剛輸入的資料。

3.routes.rb裡面越上面的規則優先權較高。

4.Unknown action
明明有在config/routes.rb裡面定義了resources路由,但是出現以下的Unknown action錯誤;
排除打錯字之外,其原因多半是跟routes.rb裡面的定義順序有關。注意到在routes.rb裡面,越上面的路由規則越優先。
  Routing Error
這錯誤通常發生在link_to裡,它抱怨找不到適合的路由規則來產生網址;
如果你是用典型路由,那麼如以下程式亂給一個不存在的Controller,就會產生一樣的錯誤了:

link_to "foobar", :controller => "No such controller", :action => "blah"
因為{ :controller => "No such controller", :action => "blah" }比對不出有這個路由規則。但是如果是用RESTful路由呢?那多半是因為參數傳錯了,例如:

link_to "Show", event_path(@foobar)
這個@foobar沒有定義所以是nil,event_path(@foobar)對Rails內部來說等同於{ :controller => "events", :action => "show", :id => nil },這就造成了找不到路由的錯誤,它必須知道:id才能知道是那一個活動的show Action網址。

热点排行