作者godfat (godfat 真常)
看板Ruby
標題Re: [心得] 一點 rails 雜項心得
時間Mon Dec 17 16:37:41 2007
※ 引述《godfat (godfat 真常)》之銘言:
: 4. 我不是很懂何謂 REST, 每次看到一堆超長的描述就懶得看...
: 不過 respond_to 寫起來真的是很爽,可以同時處理一大群的 output.
: 像是現在我寫了這個:
: class ApplicationController < ActionController::Base
: before_filter :restful_response
: protected
: def restful_response
: template = "#{self.controller_name}/#{self.action_name}.xhtml.erb"
: respond_to{ |format|
: format.html{ render :template => template }
: format.xhtml
: format.xml{ render :template => template, :layout => false }
: }
: end
: end
: 這樣我的 xhtml/html/xml 都可以使用同樣的 template,
真是搞笑了,這個用起來大有問題
原本我是想寫成 after_filter, 卻會產生 double render 的問題
好吧,before_filter 總行吧?看似可行,實際上卻會造成
原本的 action 完全失效 :(
試了好多種方法,好像都不行,包括在裡面加上:
self.send self.action_name.to_sym
查了半天,總算在這裡看到些解答:
Render, Redirect, or... allow plugins to add further options
http://www.ruby-forum.com/topic/125689
被加到 trac 裡面了:
http://dev.rubyonrails.org/ticket/9953
我不知道他是哪一個正式版中可以用,至少手上的 2.0.1 可以用。
這是直接去看 source code 才發現的...
本來是想 monkey patch 過去 -_-b
所以以上的 restful_response 直接改名為 default_render 就可以了。
不過老實講,沒有 @default_render_chain 有點失望 -_-b
其實這也不是無解啦,一樣:
def default_render
@default_render_chain.each{ |renderer|
rendered? = case renderer.class
when Proc; renderer.call
when Symbol; self.send renderer
end
return rendered? if rendered?
}
return render
end
自己做也不困難
--
#!/usr/bin/ruby [露比] /Programming (Kn|N)ight/ 看板《Ruby》
# if a
dog nailed
extra legs that
http://webptt.com/m.aspx?n=bbs/Ruby/index.html
#
walks like an octopus, and Welcome ~
Ruby@ptt~
#
talks like an octopus, then
◢█◣ http://www.ruby-lang.org/
# we are happy to treat it as
█ http://www.ruby-doc.org/
# if it were
an octopus.
◥ ◤ http://www.rubyforge.org/
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.218.90.242