ruby on rails 知识点(上)

本文详细解析了Rails控制器中的Action方法与路由系统的关系,包括公开方法的使用、内部方法的保护与私有化、错误处理机制以及路由规则的优先级。重点探讨了如何在验证失败时正确处理新Action,防止数据丢失并提供用户友好的反馈。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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這個方法。[color=red]如果改成使用redirect_to會讓瀏覽器重新導向到new Action,但是如此一來@event就被重新建立而失去使用者剛輸入的資料。[/color]

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網址。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值