错误后渲染编辑时,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 附加到单个路由的主要内容,如果未能解决你的问题,请参考以下文章

Rails 6.1 如何将文件渲染到页面模板中

将附加字段动态添加到 rails 表单

从rails中的控制器渲染部分

将 Rails 实体渲染为文件

RAILS 3.1 - 未知属性:构建时的 id

布局编辑器渲染错误(未渲染)