【问题标题】:Search form Couldn't find User with 'id'=搜索表单找不到具有 'id'= 的用户
【发布时间】:2021-01-24 00:12:41
【问题描述】:

我需要创建搜索表单来搜索用户的所有案例 pt_name

我收到了这个错误

找不到具有 'id'= 的用户

万一控制器

def index
    @user =User.find(params[:id])
    @cases=@user.cases
    if params[:search]
      @search_term = params[:search]
      @cases= @user.cases.casesearch_by(@search_term)
    end
  end

万一模型

class Case < ActiveRecord::Base
  belongs_to :user

  def self.casesearch_by(search_term)
    where("LOWER(pt_name) LIKE :search_term OR LOWER(shade) LIKE :search_term",
     search_term: "%#{search_term.downcase}%")
  end
end

在 index.html.erb 的情况下

<%= form_for "",url: cases_path(@user.id), role: "search", method: :get  ,class: "navbar-form navbar-right" do %>
         <%= text_field_tag :search, @search_term,placeholder: "Search..."  %>
 <% end %>

【问题讨论】:

    标签: ruby-on-rails database search model-view-controller


    【解决方案1】:

    问题出在控制器的第一行。 提交表单后,它会发送到 cases_path(@user.id) - 这就是您在表单中指定的内容。

    如果您使用rails routes 进行检查,您会看到cases_path 实际上是“/cases”(我假设您没有覆盖它)并且没有任何id 占位符(喜欢它将用于显示操作,例如转到“/cases/:id”。

    现在您仍然在 cases_path(@user.id) 中指定 @user.id,然后您尝试从参数中找到具有 id 的用户。但是,如果您在到达控制器后检查您的参数(使用 binding.pry 或其他工具),您将看到参数中没有键 :id。你也可以检查它要去的 url,我相信它看起来像这样:“/cases.1”。

    你可以通过改变路径来解决这个问题

    cases_path(user_id: @user.id)
    

    通过这种方式,您可以将新的键值对添加到 params 哈希中,然后在您的控制器中进行相应的更改:

    @user =User.find(params[:user_id])
    

    您还可以在表单中添加隐藏字段以传递用户 ID:

    <%= form_for "", url: cases_path, role: "search", method: :get, class: "navbar-form navbar-right" do %>
       <%= text_field_tag :search, @search_term,placeholder: "Search..."  %>
       <%= hidden_field_tag :user_id, @user.id %>
     <% end %>
    

    然后在控制器中检索它。

    要检查您在控制器操作中获得的参数,请使用诸如 pry byebug 之类的 gem 或仅使用关键字 raise,然后检查 params 变量。

    【讨论】:

    • localhost:3000/cases?utf8=%E2%9C%93&search=marah 我仍然收到此错误找不到具有 'id'= 的用户
    • 您更改了表单中的路径? &lt;%= form_for "",url: cases_path(user_id: @user.id) 并且不在网址中?
    • 这很奇怪,我在我的一个应用程序中尝试过,并且用户 ID 已附加到 url。您还可以添加一个隐藏字段 - 我编辑了我的答案。
    • localhost:3000/… 还是一样的错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-15
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    相关资源
    最近更新 更多