Rails ActionView::Template::Error неопределенный метод `count' Resolver

Примечание. Я использую ruby ​​2.5.1 и rails 4.2.10

Я получаю сообщение об ошибке в своем проекте rails, и я считаю, что это связано с тем, что один из моих классов называется Resolver. Вот соответствующие файлы:

Миграция

class CreateResolvers < ActiveRecord::Migration
  def change
    create_table :resolvers do |t|
      t.belongs_to :user, index: true
      t.string :name
    end
  end
end

Класс

class Resolver < ActiveRecord::Base
  belongs_to :user
end

Контроллер

class ResolversController < ApplicationController
  def create
    ent = Entity.new(entity_params)
    ent.save!
    redirect_to '/getting_started/resolvers'
  end

  def update
    resToUpdate = Resolver.find(params['id'])
    resToUpdate.update(resolver_params)
    redirect_to '/getting_started/resolvers'
  end

  private

  def resolver_params
    params.require('resolver').permit(
        :name
    )
  end
end

Итак, вот моя ошибка: когда я захожу в консоль rails и делаю Resolver.count, она работает нормально, но на моей фактической html-странице у меня есть строка:

<% if (Resolver.count > 0) %>

и я получаю сообщение об ошибке:

undefined method 'count' for ActionView::Resolver:Class

Теперь очевидно, что ActionView::Resolver:Class не правильно. Я попытался изменить их на ::Resolver и ActiveRecord::Base::Resolver, но ничего не получилось. Как я могу использовать класс с именем Resolver без рельсов, предполагая, что это ActionView::Resolver


person Trevor Thomas    schedule 19.07.2018    source источник


Ответы (2)


Наличие запросов в представлении — это антипаттерн.

В любом случае правильный способ сделать это - сделать это в контроллере и передать переменную в представление.

@resolvers_count = Resolver.count и в представлении проверьте if @resolvers_count > 0

лучший способ

@resolvers_exist = Resolver.exists?, а затем if @resolvers_exist

person khaled_gomaa    schedule 19.07.2018

Не лучше ли определить переменную экземпляра в контроллере, такую ​​​​как @resolver_count = Resolver.count, чтобы вы могли получить счет, вызвав @resolver_count в своем представлении?

person Mehmet Adil İstikbal    schedule 19.07.2018