使用RESTful路由隐藏id - rails

时间:2011-11-29 11:53:52

标签: ruby-on-rails ruby-on-rails-3 routing

我使用 -

为我的应用添加了资源路径
resources :cars

我用脚手架来做这个

然后我更改了路线,以便用户可以使用以下网址编辑汽车 - mydomain.com/CARNAME

match "/:car" =>"cars#edit", :as => :edit_car
match "/:car/thanks" =>"cars#thanks", :as => :thanks

我的编辑操作如下所示 -

def edit
  @car = Car.find_by_name(params[:car]) || not_found
end

我的问题是在编辑页面(mydomain.com/CARNAME)呈现这样的表单 -

<form accept-charset="UTF-8" action="/cars/2" class="edit_car" id="edit_car_2" method="post">

我想隐藏我希望它看起来像这样的汽车ID

<form accept-charset="UTF-8" action="/cars/CARNAME" class="edit_car" id="edit_car_CARNAME" method="post">

我的更新操作目前就是这样 -

def update
  @car = Car.find(params[:id]) #I'll have to change this to - Car.find_by_name(params[:name])
  if @car.update_attributes(params[:car])
      format.html { redirect_to(thanks_path(@car.name)) }
   else
      format.html { render action: "edit" }
   end
end

我还希望更新操作重定向回编辑操作(mydomain.com/CARNAME)并继续通过任何验证问题。

2 个答案:

答案 0 :(得分:3)

如果你想要的东西比覆盖to_param更通用,你可以改用FriendlyId

答案 1 :(得分:0)

尝试覆盖Car模型中的方法to_param

class Car
  def to_param
    self.name
  end
end

然后视图应该呈现您期望的URL。