2013-02-24 70 views
0

在SQL我这样做:如何选择最小月份值?

SELECT minimummonths WHERE name = "gold" 

我想要做相同的Ruby on Rails和在我的命令控制器的新的部分如下:

@plan = params[:plan] 

@Payplanrow = Payplan.where(:name => @plan).minimummonths 

然后我试着在我的页面中使用<%[email protected] %>显示@payplanrow,但它不起作用。我收到错误:

undefined method `minimummonths' for #<ActiveRecord::Relation:0x007fe30f870ec0> 

我想打印所选计划的minimummonths值。将只有一行数据对应于@plan值。

我对Ruby on Rails很新,所以我只是想让指针朝向正确的方向。我到处看,但似乎没有这样的例子。

回答

1

问题是Payplan.where(:name => @plan)将返回Payplan对象的数组。假设你使用Rails 3,你可以在“Active Record Query Interface”中阅读更多关于它的信息。

但是,如果你确信你的查询只返回一个记录,你可以这样做:

@Payplanrow = Payplan.where(:name => @plan).first.try(:minimummonths) 

Rails的方式是在你的模型范围:

​​
+0

太棒了!非常感谢你的帮助 – user2104797 2013-02-24 17:00:15

+0

np,很高兴帮助:D – sameera207 2013-02-24 17:26:36

0

虽然它不是真正的优化,你可以这样做:

@Payplanrow = Payplan.where(:name => @plan).first.minimummonths 
+0

。首先应该早于.minimummonths :) – sameera207 2013-02-24 16:38:38

+0

我的错误,要更新它。 – macool 2013-02-24 16:39:47

0

这应该是:

Payplan.where(:name => @plan).first.minimummonths 
0

你可以使用pluck只得到了minimummonths值:

minimummonths = Payplan.where(:name => @plan).pluck(:minimummonths).first 
0

而是全光照的g where then first,当您期待single record时,最好使用find

@Payplanrow = Payplan.find_by_name(@plan).try(:minimummonths)