获得具有“文本”类型的字段

时间:2013-07-22 14:14:47

标签: mysql ruby-on-rails ruby ruby-on-rails-3.2

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。

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

4 个答案:

答案 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可以解决问题。