0

在 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 还很陌生,所以我只是想找到一个正确方向的指针。我到处找,但似乎没有这样的例子。

4

5 回答 5

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)
于 2013-02-24T16:37:46.907 回答
0

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

minimummonths = Payplan.where(:name => @plan).pluck(:minimummonths).first
于 2013-02-24T16:43:01.317 回答
0

那应该是:

Payplan.where(:name => @plan).first.minimummonths
于 2013-02-24T16:35:03.683 回答
0

尽管它不是真正的最佳选择,但您可以执行以下操作:

@Payplanrow = Payplan.where(:name => @plan).first.minimummonths
于 2013-02-24T16:23:23.927 回答
0

与其使用where then first,不如find在您期待single record.

 @Payplanrow = Payplan.find_by_name(@plan).try(:minimummonths)
于 2013-02-24T18:04:31.177 回答