Ruby on Rails中完成500内部服务器错误

时间:2014-12-26 13:30:37

标签: mysql ruby-on-rails ruby activerecord mysql2

我正在尝试搜索,但没有得到任何结果。这是错的:

def BuscarRoles(usuario)
    @sql="SELECT * FROM rols WHERE id_rol IN (SELECT id_rol FROM rol_usuarios WHERE id_usuario =  "+usuario.to_s+")"
    @roles = ActiveRecord::Base.connection.execute(@sql)
    @tira='['
   if @roles.count>0
                @aroles.each do |rol|
                 @tira = @tira+" { id_rol: '" + rol.id_rol.to_s + "', descripcion: '" + rol.descripcion.to_s
                 j=j+1
                 if j<@roles.count
                  @tira = @tira+ " }, "
                 else
                  @tira = @tira+" } ] "
                 end
                end
    else
                @tira= @tira+"{ { text: 'No hay datos', id: '0', href: '', leaf: true } } ]"
    end
    return @tira
  end

1 个答案:

答案 0 :(得分:1)

通过查看代码,没有给出跟踪,我只能看到一个可能导致错误的事情。

ActiveRecord::Base.connection.execute
#the result of the above code is Mysql2::Result of course depending on what database you're using.

因此,您不能像对模型对象那样使用。(点)运算符。

因此,您可以在代码中进行以下更改

@aroles.each do |rol|
  #puts rol.id_role => this will throw error 
  puts rol[0] # this should work assuming id_role is the first column
end

那应该有所帮助。正如您在评论中提到的那样,您在@aroles.each do |rol|中收到错误,那么您必须检查sql语句是否返回任何结果?

顺便说一下,即使查询没有返回任何结果,它也只会返回一个空数组,并且迭代一个空数组会简单地给出任何内容,但不会抛出任何错误。

总结

  1. 检查是否有任何记录
  2. 使用索引而不是列名,因为它们是active_record对象
  3. 希望有所帮助。