错误后渲染编辑时,Rails 将 id 附加到单个路由
Posted
技术标签:
【中文标题】错误后渲染编辑时,Rails 将 id 附加到单个路由【英文标题】:Rails appends id to singular route when render edit after errors 【发布时间】:2011-08-31 22:45:02 【问题描述】:我有以下单数路线:
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将编辑记录的id附加到url。例如, 当我第一次编辑记录时,网址是:
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。我该怎么办?
【问题讨论】:
我想这与您在编辑视图中用于表单的 URL 有关。你能提供那部分代码吗? (form_for
... 部分)
【参考方案1】:
我对 simple_form_for 的工作并不多。但看起来它总是在猜测你的 url,就好像它们不是单一资源一样。您可以提供一个自定义的:
<%= simple_form_for @seller_profile, :url => seller_profile_path do |f| %>
<%= f.input :name %>
<%= f.input :description %>
<%= f.submit %>
<% end %>
【讨论】:
以上是关于错误后渲染编辑时,Rails 将 id 附加到单个路由的主要内容,如果未能解决你的问题,请参考以下文章