2013-02-24 77 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)