如何选择minimummonths值?

时间:2013-02-24 16:18:02

标签: ruby-on-rails ruby

在SQL中我会这样做:

SELECT minimummonths WHERE name = "gold"

我想在Ruby on Rails中做同样的事情,并在我的订单控制器的新部分中有以下内容:

@plan = params[:plan]

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

然后我尝试使用@payplanrow在我的页面中显示<%=@Payplanrow %>,但它不起作用。我收到错误:

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

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

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

5 个答案:

答案 0 :(得分:1)

问题是Payplan.where(:name => @plan)正在返回Payplan个对象的数组。假设您使用的是Rails 3,您可以在“Active Record Query Interface”中阅读更多相关内容。

但是,如果您确定您的查询只返回一条记录,则可以执行以下操作:

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

Rails方法是在模型中使用范围:

class Payplan < ActiveRecord::Base

  scope :by_name, lambda {|name|
     {:conditions => {:name => name}}
  }

end

#controller 
@Payplanrow = Payplan.by_name(@plan).first.try(:minimummonths)

答案 1 :(得分:0)

虽然它不是最佳选择,但你可以这样做:

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

答案 2 :(得分:0)

应该是:

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

答案 3 :(得分:0)

您可以使用pluck仅获取minimummonths值:

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

答案 4 :(得分:0)

而不是使用where then first,最好在期待find时使用single record

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