获取具有`text`类型的字段
类Issue
继承自ActiveRecord
(ruby 1.9.3p429(2013-05-15修订版本40747)[x86_64-linux],Rails 3.2.13)。在这一类我试图进行以下选择:获取具有`text`类型的字段
results = Issue.find_by_sql("select id, notes from mydb.issues;")
results.each do |r|
puts r.notes.class.name
end
输出是每行NilType
。
字段notes
的类型为text
(MySQL,Ver 14.14 Distrib 5.5.31,用于使用readline 6.2的debian-linux-gnu(x86_64))。这是该领域的一些文字,我可以看到它是MySQL Workbench。
为什么发生?如何正确访问这样的字段?
继@Frederick Cheung和@Salil提供的指针,我VE发现Issue
类的定义如下:
delegate :notes, :notes=, :to => :current_journal, :allow_nil => true
当然,在结果记录更改名称notes
解决了这个问题。
可能是你已经添加notes
为attr_protected
class Issue < ActiveRecord::Base
attr_protected :notes
end
issue = Issue.new("notes" => "Some notes here")
issue.notes # => nil
感谢您的指针!这是'代表'。 –
我认为你是错做它,你已经从你的表中选择所有的笔记,现在你的结果对象包含在阵列中的所有笔记,所以你通过它必须只循环:
如果您有其他“笔记”的模式,比你要做到这一点:
results = Issue.find_by_sql("select * from mydb.issues;")
results.each do |r|
puts r.notes.class.name
end
Ø r如果你的问题表中有笔记字段,则应该这样做:
results = Issue.find_by_sql("select notes from mydb.issues;")
results.each do |r|
puts r.class.name
end
希望它能帮上忙。谢谢
r.class.name会返回'Issue',r.notes.class.name只会返回'String'。 – Bala
记录集也包含一些其他文件。我编辑了我的问题来反映这一点。 –
从数据库中检索单个列的正确方法是使用pluck
。如果下面的行返回false
Issue.pluck(:notes).any?{ |v| !v.nil? }
# or, since you're using MySQL:
Issue.where('notes IS NOT NULL').pluck(:notes).present?
很可能是你有一些严重的问题(数据库连接指向另一个数据库,FE)
记录集也包含其他字段,实际的SQL非常复杂。为了简单起见,我减少了它。 –
如果SQL很复杂,那么问题很可能是由于SQL的复杂性造成的,所以不可能仅使用它的一部分进行调试;此外,如果您发布的代码与提供问题的代码不一致,则很难为您提供帮助 – mdesantis
为什么指定数据库名称? – mdesantis
问题类中看起来有关的任何东西? –
它是否返回NilType或NilClass?你可以包括'哪里不是空的',看看它是否返回相同的消息? – Bala