我看过所有关于此类错误的帖子,而且似乎都与我的相似。每当尝试在/ 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错误,所以我不必担心它。
答案 0 :(得分:1)
请尝试在listing_search.rb的belongs_to中使用单数
belongs_to :search
belongs_to :listing