我有一个小Rails初学者问题:
在我的Rails帮助器中,我创建了一个方法,我用它来显示我的视图中的价格:
def price
pricea = Hotel.order(wdpricenm: :asc).first
priceb = Hotel.order(wepricenm: :asc).first
if (pricea.wdpricenm + priceb.wepricenm) < (priceb.wdpricenm + priceb.wepricenm)
return (pricea.wdpricenm + priceb.wepricenm)
else
return (priceb.wdpricenm + priceb.wepricenm)
end
<td><%= price %></td>
它的工作没有问题,但我想把pricea / priceb变量(存储查询)放在rails应用程序的其他地方,因为我也想将它们用于其他方法。
我的问题是:你会建议将这些价格变量放在Rails中,特别是你会使用哪些变量类型?
感谢所有回复,
干杯罗布
答案 0 :(得分:4)
使用范围:http://guides.rubyonrails.org/active_record_querying.html#scopes
Class Hotel < ActiveRecord:Base
scope :pricea, -> { order(wdpricenm: :asc).first }
scope :priceb, -> { order(wepricenm: :asc).first }
end
答案 1 :(得分:1)
Class Hotel < ActiveRecord:Base
def self.pricea
self.order(wdpricenm: :asc).first
end
def self.priceb
self.order(wepricenm: :asc).first
end
end
现在您可以使用:
pricea = Hotel.pricea
priceb = Hotel.priceb
如果您需要在不同视图中提供这些价格,您可以在控制器中执行此操作:
Before_action :retrieve_prices, only: [:action1, :action2]
def retrieve_prices
@pricea = Hotel.pricea
@priceb = Hotel.priceb
end
这样,这些变量仅适用于所选操作,并且这些方法可以在任何地方重复使用。
答案 2 :(得分:0)
编辑:每条评论
在模型中:
Class Hotel < ActiveRecord::Base
scope :weekday_min, -> { where(minimum(:wdpricenm)).first }
scope :weekend_min, -> { where(minimum(:wepricenm)).first }
def self.best_deal(weekdays, weekend_days)
weekday_min_tot = (weekdays * weekday_min.wdpricenm) + (weekend_days * weekday_min.wepricenm)
weekend_min_tot = (weekend_days * weekend_min.wdpricenm) + (weekend_days * weekend_min.wepricenm)
[weekday_min_tot, weekend_min_tot].min
end
end
在控制器中:
@best_deal = Hotel.best_deal
在视图中显示总价格(但没有暗示哪个酒店):
<%= @best_deal %>
请注意缺少助手。
另请注意:最好的交易可能不是这些选择。您需要的是计算每家酒店的总数,然后取最小值。
在你拿起Rails之前,你有一段旅程。这是一个很大的问题。我建议开始使用Hartl教程。并且不要忘记学习Ruby。