在错误后进行渲染编辑时,Rails会将id附加到单一路径

时间:2011-05-24 13:17:37

标签: ruby-on-rails-3 url routes

我有以下单一路线:

scope '/seller' do
  resource :seller_profile, :path => "/profile", :only => [:show, :edit, :update]
end

和以下控制器:

class SellerProfilesController < ApplicationController
  before_filter :validate_user_as_seller

  def show
     @seller_profile = current_user.seller_profile
  end

  def edit
     @seller_profile = current_user.seller_profile
  end

  def update
    @seller_profile = current_user.seller_profile

    if @seller_profile.update_attributes(params[:seller_profile])
       redirect_to(seller_profile_path, :notice => 'Profile was successfully updated.')
    else
       render :action => "edit"
     end
   end
end

我使用单一路径,因为在获得对控制器的访问权限之前必须对用户进行身份验证,因此我可以从登录的用户处获取seller_profile。

这就像一个魅力,只有一个问题。当我编辑seller_profile并发生验证错误时,将再次编辑表单并正确显示错误。问题是rails将url添加到已编辑记录的id中。例如, 当我第一次编辑记录时,网址是:

http://0.0.0.0:3000/seller/profile/edit

但如果提交的表单包含验证错误,则表单本身会在

下重新显示
http://0.0.0.0:3000/seller/profile.2

其中2是正在编辑的记录的ID。

表格如下:

<%= simple_form_for @seller_profile do |f| %>
  <%= f.input :name %>
  <%= f.input :description %>   
  <%= f.submit %>
<% end %>

如上所述,一切都很有效,但我会完全掩盖网址中的ID。我该怎么办?

1 个答案:

答案 0 :(得分:0)

我对simple_form_for并没有太多的帮助。但看起来它总是猜测你的网址就好像它们不是单一资源一样。您可以提供自定义的:

<%= simple_form_for @seller_profile, :url => seller_profile_path do |f| %>
  <%= f.input :name %>
  <%= f.input :description %>   
  <%= f.submit %>
<% end %>