ubuntu, ror, jQuery, css, website memo
太嫩, 沒啥心得, 用來紀錄每天學的
2009年9月10日 星期四
Railscast skill (6)
Restricting Access
helper_method 可以把某些controller 的method 弄到helper 一起用
<% if admin? %>
<%= link_to 'New Episode', new_episode_path %>
<% end %>
# controllers/application.rb
helper_method :admin?
protected
def admin?
false
end
def authorize
unless admin?
flash[:error] = "unauthorized access"
redirect_to home_path
false
end
end
# episodes_controller.rb
before_filter :authorize, :except => :index
Console Tricks
# 好一個 sandbox
ruby script/console --sandbox
Loading development environment in sandbox (Rails 2.2.2)
Any modifications you make will be rolled back on exit
>>
# 好一個 y
>> y User.first
--- !ruby/object:User
attributes:
updated_at: 2009-09-10 06:45:46
email_notify: "1"
remember: "0"
nickname: shlee
id: "1"
# helper
>> helper.text_field_tag :foo
=> "
"
# app 好物, hash_for_............ 好物
>> app.methods.grep(/_path$/)
>> app.homepage_path
=> "/"
>> app.hash_for_homepage_path
=> {:action=>"index", :only_path=>true, :controller=>"tc2", :use_route=>:homepage}
# 可以自訂method 在 ~/.irbrc 裡
Handling Exceptions
#除了在 在product.rb 裡的設定
config.action_controller.consider_all_requests_local = false
#還必須在application controller裡overwrite 掉 local_request? 這樣你在那邊用localhost:3000 它才會認出你是localhost 來的, 這樣才會丟500那種頁面給你
# 所以其實也可以在裡面多加上 admin 的判斷 如果是admin 的話 就讓它丟那種詳細的 error message
# application.rb
def local_request?
false
end
#要overwirte 一些exception 就可以在這用
def rescue_action_in_public(exception)
case exception
when ActiveRecord::RecordNotFound
render :file => "#{RAILS_ROOT}/public/404.html", :status => 404
else
super
end
end
Catch-all Route
可以利用這招把所有奇怪的route 路徑都拿去 在controller 裡面在做些有的沒的處理
# routes.rb
map.connect '*path', :controller => 'redirect', :action => 'index'
# redirect_controller.rb
def index
product = Product.find(:first, :conditions => ["name LIKE ?", "#{params[:path].first}%"])
redirect_to product_path(product)
end
沒有留言:
張貼留言
較新的文章
較舊的文章
首頁
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言