我正在尝试为问题实施索引视图,您可以在其中选择标签链接以将问题过滤为带有该标签的问题。我在Question中有一个类方法,该方法仅返回已标记的帖子。 Rails在该方法中给我Tag类名称一个错误,尽管它可以在控制台中使用。
关于StackOverflow的RecordNotFound问题似乎都不是关于引用另一个类的。关于调试这类东西的任何建议或可能会发生什么?
我正在使用Rails 5.2.0和Ruby 2.4.2。
错误
ActiveRecord::RecordNotFound (Couldn't find Tag):
app/models/question.rb:13:in `tagged'
app/controllers/questions_controller.rb:6:in `index'
NameError: uninitialized constant Mime::HTML
问题index.html.erb
<h2>Questions</h2>
<div class="row">
<div class = "tags">
<% Tag.all.each do |t| %>
<%= link_to t.name, questions_path(tag: t.name), class: 'badge badge-primary'%>
<% end %>
</div>
<% if current_user.customer? %>
<%= render "question" %>
<% else %>
<%= render "admin_question" %>
<% end %>
</div>
<div id="paginator">
<% @questions = @questions.page(params[:page]).per(10) %>
<%= paginate @questions, remote: true %>
</div>
问题控制器
class QuestionsController < ApplicationController
before_action :set_question, only: [:show, :edit, :update, :destroy]
def index
if params[:tag]
@questions = Question.tagged(:tag).page(params[:page]).per(10)
else
@questions = Question.page(params[:page]).per(10)
end
end
模型
class Question < ActiveRecord::Base
validates_presence_of :body
has_many :answers
has_many :users, through: :answers
has_many :taggings
has_many :tags, through: :taggings
def to_s
self.body
end
def self.tagged(tag)
Tag.find_by_name!(tag).questions
end
end
class Tagging < ApplicationRecord
belongs_to :question
belongs_to :tag
end
class Tag < ApplicationRecord
has_many :taggings
has_many :questions, through: :taggings
end
答案 0 :(得分:1)
如果您查看错误,则可以看到它发生在第6行的控制器中。
问题出在Question.tagged(:tag)
上。在这里,您正在过滤带有标签:tag
的问题,并且可能尚未创建名称为:tag
的标签。我相信您想过滤以params传递的标记所标记的问题,因此您应该使用Question.tagged(params[:tag])
。