【问题标题】:Hiding id with RESTful routes - rails使用 RESTful 路由隐藏 id - rails
【发布时间】:2011-11-29 20:40:30
【问题描述】:

我已使用 -

向我的应用添加了资源路由
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) 并继续解决任何验证问题。

【问题讨论】:

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


    【解决方案1】:

    如果您想要更通用的东西而不仅仅是覆盖 to_param,您可以改用 FriendlyId

    【讨论】:

    • 谢谢,我去看看。
    【解决方案2】:

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

    class Car
      def to_param
        self.name
      end
    end
    

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

    【讨论】:

    • 这让我在部署到 Heroku 时感到无比痛苦。 stackoverflow.com/questions/8386403/…
    • 为此,您的to_param 必须包含对象ID。比如"#{self.id}-#{self.name}" - 如果你只是想要名字你最好使用友好的id来保持它们之间的映射:github.com/norman/friendly_id
    • 除此之外,我真的看不出您的代码有什么问题。我实际上在 Heroku 的 prod 中使用了 Friendly id。效果很好。
    猜你喜欢
    • 1970-01-01
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 2011-04-09
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多