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