ActiveRecord RecordNotFound用于其他类名

时间:2018-07-29 17:55:51

标签: ruby-on-rails activerecord

我正在尝试为问题实施索引视图,您可以在其中选择标签链接以将问题过滤为带有该标签的问题。我在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

1 个答案:

答案 0 :(得分:1)

如果您查看错误,则可以看到它发生在第6行的控制器中。

问题出在Question.tagged(:tag)上。在这里,您正在过滤带有标签:tag的问题,并且可能尚未创建名称为:tag的标签。我相信您想过滤以params传递的标记所标记的问题,因此您应该使用Question.tagged(params[:tag])