0

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,对于使用 readline 6.2 的 debian-linux-gnu (x86_64))。这是该字段中的一些文本,我可以看到它 MySQL Workbench。

为什么会这样?如何正确访问这样的字段?

4

4 回答 4

1

可能是您已添加notesattr_protected

  class Issue < ActiveRecord::Base
    attr_protected :notes
  end

  issue = Issue.new("notes" => "Some notes here")
  issue.notes # => nil
于 2013-07-22T14:28:05.113 回答
0

我认为您做错了,您已经从表格中选择了所有注释,现在您的结果对象包含数组中的所有注释,因此您只需循环遍历它:

如果您有另一个“注意”模型,则必须这样做:

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

希望它会有所帮助。谢谢

于 2013-07-22T14:28:42.983 回答
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?

您可能有一些严重的问题(指向另一个数据库的数据库连接,fe)

于 2013-07-22T14:36:20.737 回答
0

按照@Frederick Cheung 和@Salil 提供的指针,我发现Issue该类具有以下定义:

delegate :notes, :notes=, :to => :current_journal, :allow_nil => true

当然,更改notes结果记录集中的名称可以解决问题。

于 2013-07-22T15:45:41.850 回答