2011-03-14 70 views
2

我有一个名为offer的资源。当我编辑报价时,URL看起来像“/ offers/1/edit”。如何避免ID完全显示在URL中?Rails控制器编辑操作 - 如何避免显示id?

我想将会议ID存储在会话中,因为要约操作应该是公开的。如果有人尝试在网址中手动输入不同的ID,我感到恐惧。那可能吗?

我想要的URL看起来像这样:“/ offers/edit”。

创建操作响应此:渲染“编辑”。这里的ID不显示,URL只是“/ offers”,很好。

但是,此响应(渲染“编辑”)导致再次显示带有ID的URL grrr。

有没有解决方案?

感谢您的帮助! Marc

+0

你可以发布你的'routes.rb'文件吗?或者至少是“提供”路线 – errorhandler 2011-03-14 21:49:50

+2

fyi如果你这样做,那么你将无法链接到特定的优惠。如果你真的担心人们输入不同的ID,那么你需要在对象上实现权限。或者只是让id不可能猜到并将它们链接到会话。 – 2011-03-14 21:52:03

回答

0

您可以(尽管它是一种误用)使用资源映射而不是资源。

您可以将resource :offers添加到您的routes.rb。

这会给你这样的路线:

 offers POST /offers(.:format)  {:action=>"create", :controller=>"offers"} 
new_offers GET /offers/new(.:format) {:action=>"new", :controller=>"offers"} 
edit_offers GET /offers/edit(.:format) {:action=>"edit", :controller=>"offers"} 
      GET /offers(.:format)  {:action=>"show", :controller=>"offers"} 
      PUT /offers(.:format)  {:action=>"update", :controller=>"offers"} 
      DELETE /offers(.:format)  {:action=>"destroy", :controller=>"offers"} 

或者我根本就没有使用标准的编辑映射和添加自己:

resources :offers, :except => [:edit, :update] do 
    get :edit, :on => :collection 
    put :update, :on => :collection 
end 

如果我没记错的话,则以下应该在Rails 2.3.x中工作:

map.resources :offers, :except => [:edit, :update], :collection => { :edit => :get, :update => :put } 

我没有这样的环境,所以我c ANNOT目前测试...

+0

如果我使用“资源:优惠”,那么我可以使用<%form_for(@offer)do | f | %>,因为没有offer_path路径。 有没有办法解决这个问题?我必须更改表格吗? 如果我使用 map.resources:报价,:除了=> [:编辑:更新]做 得到:编辑:于=>:收集 放:更新:上=>:收集 结束 然后耙路径不起作用: 未定义的方法get'for main:Object – 2011-03-15 19:49:51

+0

您正在使用哪个版本的Rails?耙路径与我的Rails 3.0.3上的资源版本正常工作。 – HakonB 2011-03-15 21:34:28

+0

我使用Rails 2.3.5。首先,我的提供者不提供每个版本。其次,我有很大的问题,不得不决定保持在2.3.5。 – 2011-03-15 21:55:26

1

您可以在模型

def to_param 
    your_item.name.parameterize 
end 

覆盖方法to_param则路由器会产生这样的“/报价/ name_of_your_item /编辑”。

相关问题