【问题标题】:Form displays on the new routes and gives an error on edit route [Rails]表单显示在新路线上,并在编辑路线时出错 [Rails]
【发布时间】:2021-01-11 22:53:21
【问题描述】:

_form.html.erb

<%= form_with(model: [@seller, @seller_profile], local: true) do |form| %>
 
  <div class="field">
    <%= form.label :first_name %>
    <%= form.text_field :first_name %>
  </div>

  --- similar input structure ---

  <div class="actions">
    <%= form.submit %>
  </div>
<% end %>


此视图在新路由上运行良好,但是在编辑路由上会出现此错误 ActionView::Template::Error(#ActionView::Base:0x0000000001d060 的未定义方法`seller_profile_path' 你的意思是?卖家路径):

【问题讨论】:

  • 也发布routes.rb
  • 此外,如果不是全部,我们还需要查看控制器的摘录。
  • 这是stackoverflow.com/questions/65674958/… 的后续问题,但应进行编辑以包含整个上下文。

标签: ruby-on-rails ruby


【解决方案1】:

该错误很可能是因为@seller 为零。 Rails 在数组上调用#compact,因此它相当于调用form_with(model: [@seller_profile]),它将寻找非嵌套的路由助手。

可以通过在控制器中设置@seller来解决:

class SellerProfilesController < ApplicationController
  before_action :set_seller

  # ...

  private

  def set_seller 
    @seller = Seller.find(params[:seller_id])
  end
end

或者使用shallow nesting 避免嵌套成员路由(显示、编辑、更新、销毁):

# config/routes.rb
resources :sellers do
  resource :seller_profiles, shallow: true
end
class SellerProfilesController < ApplicationController
  before_action :set_seller, only: [:new, :index, :create]

  # ...

  private

  def set_seller 
    @seller = Seller.find(params[:seller_id])
  end
end

【讨论】:

    猜你喜欢
    • 2013-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 2019-02-15
    • 1970-01-01
    相关资源
    最近更新 更多