类Issue
继承自ActiveRecord
(ruby 1.9.3p429(2013-05-15修订版40747)[x86_64-linux],Rails 3.2.13)。在这个课程中,我尝试执行以下选择:
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,debian-linux-gnu(x86_64),使用readline 6.2)。这是该领域的一些文字,我可以看到MySQL Workbench。
为什么会这样?如何正确访问这样的字段?
答案 0 :(得分:1)
您可能已将notes
添加为attr_protected
class Issue < ActiveRecord::Base
attr_protected :notes
end
issue = Issue.new("notes" => "Some notes here")
issue.notes # => nil
答案 1 :(得分:0)
我认为你做错了,你已经从表中选择了所有的音符,现在你的结果对象包含数组中的所有音符,所以你只需循环它:
如果你有另一个'Note'模型,那么你必须这样做:
results = Issue.find_by_sql("select * from mydb.issues;")
results.each do |r|
puts r.notes.class.name
end
或者如果你的问题表中有备注字段,那么你应该这样做:
results = Issue.find_by_sql("select notes from mydb.issues;")
results.each do |r|
puts r.class.name
end
希望它会有所帮助。感谢
答案 2 :(得分:0)
从数据库中检索单个列的正确方法是使用pluck
。如果以下行返回false
Issue.pluck(:notes).any?{ |v| !v.nil? }
# or, since you're using MySQL:
Issue.where('notes IS NOT NULL').pluck(:notes).present?
你可能有一些严重的问题(指向另一个数据库的数据库连接,例如。)
答案 3 :(得分:0)
按照@Frederick Cheung和@Salil提供的指示,我发现Issue
类有以下定义:
delegate :notes, :notes=, :to => :current_journal, :allow_nil => true
当然,更改生成的记录集中的名称notes
可以解决问题。