Rails ActionView :: Template :: Error未定义方法`count'解析器

时间:2018-07-19 21:09:42

标签: ruby-on-rails ruby 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是不正确的。我尝试将它们更改为::ResolverActiveRecord::Base::Resolver,但都没有用。假设它是Resolver

,如何使用没有导轨的名为ActionView::Resolver的类

2 个答案:

答案 0 :(得分:2)

在视图中具有查询是一种反模式。

正确的方法是在控制器中执行并将变量传递给视图。

@resolvers_count = Resolver.count,然后在视图中检查if @resolvers_count > 0

更好的方法是

@resolvers_exist = Resolver.exists?然后是if @resolvers_exist

答案 1 :(得分:1)

像在控制器上定义实例变量不是更好吗 @resolver_count = Resolver.count,那么您可以通过在视图上调用@resolver_count来达到目的?