簡體   English   中英

建立全局自動完成搜索時,如何在搜索欄中修復未定義的方法“ form_with”?

[英]How to fix undefined method `form_with' in my search bar when building out Global Autocomplete Search?

嘗試在rails應用程序中的多個模型上運行全局自動完成搜索並利用easy-autocomplete jquery庫和ransack gem進行搜索時,出現一個奇怪的錯誤。

具體來說,我認為錯誤在我的導航欄頁面中,因為當我嘗試undefined method form_with for #<#<class:0x007f875a6f8b58>:0x007f87600e0aa8>運行查詢undefined method form_with for #<#<class:0x007f875a6f8b58>:0x007f87600e0aa8>時收到此錯誤

我決定破解並切換form_with的form_tag,但是隨后在undefined method text_field for nil:NilClass"緊下面的行上出現錯誤undefined method text_field for nil:NilClass"我在下面列出了所有相關代碼。非常感謝您的幫助。

Main_Controller.rb

class MainController < ApplicationController
def index
end
def search
@movies    = Movie.ransack(name_cont: params[:q]).result(distinct: true)
@directors = Director.ransack(name_cont: params[:q]).result(distinct: true)

respond_to do |format|
  format.html {}
  format.json {
    @movies    = @movies.limit(5)
    @directors = @directors.limit(5)
  }
end
end
end

_navbar.html.erb

<%= form_with url: search_path, local: true, method: :get, html: { class: "form-inline my-2 my-lg-0" } do |form| %>
  <%= form.text_field :q, placeholder: "Search", data: { behavior: "autocomplete" }, class: "form-control mr-sm-2" %>
  <%= form.button "Search", class: "btn btn-outline-success my-2 my-sm-0" %>
<% end %>

search.html.erb

<div class="row">
<div class="col">
<h1>Movies</h1>
<% @movies.each do |movie| %>
  <p><%= link_to movie.name, movie %></p>
<% end %>
</div>
<div class="col">
<% @directors.each do |director| %>
  <p><%= link_to director.name, director %></p>
<% end %>
</div>
</div>

search.js

document.addEventListener("turbolinks:load", function() {
$input = $("[data-behavior='autocomplete']")
var options = {
getValue: "name",
url: function(phrase) {
  return "/search.json?q=" + phrase;
},
categories: [
  {
    listLocation: "movies",
    header: "<strong>Movies</strong>",
  },
  {
    listLocation: "directors",
    header: "<strong>Directors</strong>",
  }
],
list: {
  onChooseEvent: function() {
    var url = $input.getSelectedItemData().url
    $input.val("")
    Turbolinks.visit(url)
  }
}
}
$input.easyAutocomplete(options)
});

在您的gem文件中,將rails gem更改為最新的:gem'rails','〜> 5.1.1'或更高版本consol:捆綁包更新重新啟動rails應用程序希望這對您有用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM