gpt4 book ai didi

mysql - 无法使用 mysql2 gem 显示我的 View 中的值

转载 作者:行者123 更新时间:2023-11-29 13:03:43 24 4
gpt4 key购买 nike

我在 MySql 中进行了查询,但 Rails 不起作用,所以我安装了 mysql2 gem。

以下是信息:

http://sqlfiddle.com/#!2/9adb8/6

查询工作正常,没有问题,并显示以下结果:

 UNIT  V1  A1  N1   V2 A2  N2   V3  A3  N3   V4  A4  N4   V5  A5  N5
LIFE 2 0 0 1 2 0 0 0 0 0 0 0 0 0 0
ROB 0 1 0 0 1 2 0 0 0 0 0 0 0 0 0

-为rails 2.3.8安装了mysql2 gem

gem install mysql2 -v0.2.6

-创建 Controller :

class PolicyController < ApplicationController

def index
@result = ActiveRecord::Base.connection.execute("select distinct @sql := concat('SELECT pb.name as unit,',group_concat(concat('SUM(CASE WHEN p.state =0 AND ce.id=',id,' THEN 1 ELSE 0 END ) AS v',id,',SUM(CASE WHEN p.state =1 AND ce.id=',id,' THEN 1 ELSE 0 END ) AS a',id,',SUM(CASE WHEN p.state =2 AND ce.id=',id,' THEN 1 ELSE 0 END ) AS n',id)),' FROM cia_ensures ce LEFT JOIN policies p on ce.id = p.cia_ensure_id INNER JOIN policy_business_units pb ON pb.id = p.policy_business_unit_id INNER JOIN comercial_areas ca ON ca.id = pb.comercial_area_id AND ca.id=1 Group by p.policy_business_unit_id') from cia_ensures where id in(1,2,3,4,5);")
@result2 = ActiveRecord::Base.connection.execute("prepare stmt from @sql;")
@result3 = ActiveRecord::Base.connection.execute("execute stmt;")
end

end

-创建 View :

<% @result.each do |policy| %>
<%= policy.try(:unit) %>
<%= policy.try(:v1) %>
<% end %>

这是日志:

SQL (0.9ms)   select distinct @sql := concat('SELECT pb.name as unit,',group_concat(concat('SUM(CASE WHEN p.state =0 AND ce.id=',id,' THEN 1 ELSE 0 END ) AS v',id,',SUM(CASE WHEN p.state =1 AND ce.id=',id,' THEN 1 ELSE 0 END ) AS a',id,',SUM(CASE WHEN p.state =2 AND ce.id=',id,' THEN 1 ELSE 0 END ) AS n',id)),' FROM cia_ensures ce LEFT JOIN policies p on ce.id = p.cia_ensure_id INNER JOIN policy_business_units pb ON pb.id = p.policy_business_unit_id INNER JOIN comercial_areas ca ON ca.id = pb.comercial_area_id AND ca.id=1 Group by p.policy_business_unit_id') from cia_ensures where id in(1,2,3,4,5);
SQL (0.9ms) prepare stmt from @sql;
SQL (0.2ms) execute stmt;

我在 View 中遇到了这个错误:

undefined method `unit' for #<Array:0x7f0e668cbf88>

尝试将我的观点更改为:

<% @result2.each do |policy| %>
<%= policy.try(:unit) %>
<%= policy.try(:v1) %>
<% end %>

并收到此错误:

You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.each

再次尝试将我认为的值更改为:

<% @result3.each do |policy| %>
<%= policy.try(:unit) %>
<%= policy.try(:v1) %>
<% end %>

并收到此错误:

undefined method `unit' for #<Array:0x7f0e66b67aa8>   

再次尝试将我认为的值更改为:

<% @result3.each do |policy| %>
<%= policy.try(:unit) %>
<%= policy.try(:v1) %>
<% end %>

我无法显示或从查询中获取值,有什么方法可以显示值吗?

 UNIT  V1  A1  N1   V2 A2  N2   V3  A3  N3   V4  A4  N4   V5  A5  N5
LIFE 2 0 0 1 2 0 0 0 0 0 0 0 0 0 0
ROB 0 1 0 0 1 2 0 0 0 0 0 0 0 0 0

根据 friend 的说法,这段代码可以工作,但是我怎样才能在不写很多行的情况下显示所有这些?

<% @result3.each do |policy| %>
<%= policy[0] %>
<%= policy[1] %>
<%= policy[2] %>
<%= policy[3] %>
<%= policy[4] %>
<%= policy[5] %>
<%= policy[6] %>
<%= policy[7] %>
....
<%end%>

拜托,我花了一个月时间没有找到答案,但仍然无法获取值。

请问有人可以帮我解决这个问题吗?

我会非常感激。

最佳答案

我认为 @result3 是您想要的,因为它正在执行查询。

undefined method `unit' for #<Array:0x7f0e66b67aa8>

这告诉您try发现该对象非零,并尝试调用该对象的#unit方法。这似乎不太可能与 MySQL 结果集一起工作。

我从来没有使用过mysql2,但是快速谷歌显示它的结果对象是一个类似散列的对象,带有列名的键或只是像数组一样的直接数字索引,所以尝试这样的事情:

<% @result3.each do |policy| %>
<%= policy['unit'] %>
<%= policy['v1'] %>
<% end %>

<% @result3.each do |policy| %>
<%= policy['UNIT'] %>
<%= policy['V1'] %>
<% end %>

<% @result3.each do |policy| %>
<%= policy[0] %>
<%= policy[1] %>
<% end %>

如果这不起作用,至少试试这个看看你会得到什么:

<% @result3.each do |policy| %>
<%= policy.inspect %>
<% end %>

关于mysql - 无法使用 mysql2 gem 显示我的 View 中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23003126/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com