Rails:helper返回正确的SQL结果但忽略列

时间:2012-08-14 04:28:26

标签: ruby-on-rails ruby activerecord

我的ApplicationHelper文件中有一个帮助程序可以正常工作:

def latest_issue
  @issue = Issue.find(:all, :order => "id DESC", :limit => 1)
  return @issue
end

之后,在任何视图中使用@issue都可以正常工作,但考虑到@issue使用message有一个名为@issue.message的列会返回No Method Error。

任何帮助都会很棒!欢呼声。

2 个答案:

答案 0 :(得分:2)

问题实例变量返回一个对象数组而不是实例。如果要选择Issue对象的属性,则需要返回该对象的实例。

 @issue = Issue.find(:last)
 @issue.message

您可能正在尝试输出Issue对象的所有消息属性,如果是这种情况,则需要将@issue传递给块

 @issue.each do  |issue|
   issue.message
 end

答案 1 :(得分:2)

作为Kyle C says,当您应该从帮助者返回单个问题时,您正尝试访问问题数组的成员message

假设你正在使用Rails 3,你的帮助程序的大大改进版本将以这种方式编写:

def latest_issue
  Issue.order(:id).last
end

关于编写idomatic Ruby的一些注释:

  • 避免使用显式return语句,并将最后一个语句作为方法的返回值
  • 使用order()where()limit()之类的可链接方法,而不是将参数传递给find