注意:我正在使用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
的类
答案 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
来达到目的?