NameError(未初始化的常量Search :: Listings)

时间:2018-11-01 04:40:58

标签: ruby-on-rails

我看过所有关于此类错误的帖子,而且似乎都与我的相似。每当尝试在/ app / views /下的_search_list.html.erb中以'uninitialized constant Search::Listings'的形式使用从搜索到列表的has_many关联(这些是类名)时,都会出现错误search.listings.count。搜索。

是的,文件名分别是search.rb和listing.rb,位于应用程序/模型中。

这是每个类的代码以及我在其中运行代码的文件:

listing.rb

    # == Schema Information
#
# Table name: listings
#
#  id               :integer          not null, primary key
#  description      :text
#  price            :float
#  pricing          :string
#  title            :string
#  url              :string
#  created_at       :datetime         not null
#  updated_at       :datetime         not null
#  listings_poll_id :integer
#
# Indexes
#
#  index_listings_on_listings_poll_id  (listings_poll_id)
#

class Listing < ApplicationRecord
  has_many :listing_searches
  has_many :searches, through: :listing_searches
  has_many :users, through: :searches
end

search.rb:

# == Schema Information
#
# Table name: searches
#
#  id         :integer          not null, primary key
#  keywords   :string
#  created_at :datetime         not null
#  updated_at :datetime         not null
#  user_id    :integer
#
# Indexes
#
#  index_searches_on_user_id  (user_id)
#

class Search < ApplicationRecord

  belongs_to :user
  has_many :listing_searches
  has_many :listings, through: :listing_searches

  # Validations done before saving.
  validates_presence_of :keywords
  validate :validate_keywords

  def validate_keywords
    entry = Search.find_by(user_id: user_id, keywords: keywords)
    if entry
      errors.add(:keywords, "Those keywords are already being used by you.")
    end
  end
end

listing_search.rb:

# == Schema Information
#
# Table name: listing_searches
#
#  id         :integer          not null, primary key
#  created_at :datetime         not null
#  updated_at :datetime         not null
#  listing_id :integer
#  search_id  :integer
#
# Indexes
#
#  index_listing_searches_on_listing_id  (listing_id)
#  index_listing_searches_on_search_id   (search_id)
#
class ListingSearch < ApplicationRecord
  belongs_to :searches
  belongs_to :listings
end

_search_list.html.erb:

<% @searches.each do |search| %>
  <tr>
    <td><%= search.keywords %></td>
    <td><%= search.listings.count %></td>  --This line here is the cause
    <td><%= link_to 'Show', search %></td>
    <td><%= link_to 'Edit', edit_search_path(search) %></td>
    <td><%= link_to 'Destroy', search, method: :delete, data: { confirm: 'Are you sure?' } %></td>
  </tr>
<% end %>

我尝试将代码移至搜索控制器,但遇到相同的错误。

我尝试将'source'添加到has_many关联中。

我尝试指定将'class'选项添加到关联中。

注意:我正在使用Ruby Mine编辑代码(要运行的命令行),并且我注意到IDE在说“无法为':listings'关联字段找到关联的Rails模型”,但是我已经读过这是一个IDE错误,所以我不必担心它。

1 个答案:

答案 0 :(得分:1)

请尝试在listing_search.rb的belongs_to中使用单数

belongs_to :search belongs_to :listing