我是Ruby新手,但我尝试制作预订系统!!!
我有一个名为“房间”的模型,名称和价格(已完成):
room 1 | $100
room 2 | $150
room 3 | $200
...
我还有一个名为“Rate”的模型,名称为begin_period,ending_period和%_price(已完成)
Season1_standard | 08/01/2014 | 09/30/2014 | 100%
OtherSeason1_standard | 08/15/2014 | 10/25/2014 | 70%
Season2_standard | 10/01/2014 | 12/31/2014 | 80%
Season3_standard | 01/01/2015 | 03/31/2015 |90%
...
我做了一个联接表(完成):
room has_and_belongs_to_many :rates
rate has_and_belongs_to_many :rooms
所以我可以为房间和房间选择费率。
现在我的问题是:
我有一个名为“预订”的模型,包含room,start_date和end_date,价格,我想计算价格价格:
例如:
我想从2014年9月28日到2014年4月10日(6晚)预订1号房间
room1与season1_standard和season2_standard
相关联所以我试着做这样的事情:
09/28/2014 = $100 * 100% = $100
09/29/2014 = $100 * 100% = $100
09/30/2014 = $100 * 100% = $100
10/01/2014 = $100 * 80% = $80
10/02/2014 = $100 * 80% = $80
10/03/2014 = $100 * 80% = $80
我的价格将是总和= $ 540
我迷路了。我不知道从哪里开始!我想我必须在我的预订模型中做一些事情,但我不知道如何从连接表rates_rooms中取回价值?
如果您有任何想法或链接来学习一些新概念,那将是我的最佳选择
很多
编辑:表格和代码
所以这是真正的法语文本代码!
create_table "villas", force: true do |t|
t.string "nom"
t.float "prix_nuit_hs"
create_table "tarifications", force: true do |t|
t.string "nom"
t.date "periode_debut", limit: 255
t.date "periode_fin", limit: 255
t.integer "pct_prix_base"
create_table "reservations", force: true do |t|
t.string "date_debut"
t.string "date_fin"
t.integer "prix_location"
所以在reservation.rb
def calcul
dd = Date.strptime(date_debut, "%m/%d/%Y")
df = Date.strptime(date_fin, "%m/%d/%Y")
prix_location = 0
[dd..df].each do |date|
tarification = villa.tarifications.where('periode_debut >= ? AND periode_fin <= ?',date,date).first
prix_location += tarification.pct_prix_base * villa.prix_nuit_hs
end
return prix_location
end
我尝试在日期中更改date_de但et date_fin而没有Date.strptime代码,但我有同样的错误非常感谢您的帮助
修改
抱歉,我没有看到所有的修改。所以我尝试了这个新代码:
def calcul
dd = Date.strptime(date_debut, "%m/%d/%Y")
df = Date.strptime(date_fin, "%m/%d/%Y")
prix_location = 0
[dd..df].each do |date|
tarification = Tarification.where('periode_debut >= ? AND periode_fin <= ?',date,date).select{|r| r.in?(villa.tarifications)}.first
prix_location += tarification.pct_prix_base * villa.prix_nuit_hs
end
return prix_location
end
但我仍然有这条消息错误:
SQLite3::SQLException: near ",": syntax error: SELECT "tarifications".* FROM "tarifications" WHERE (periode_debut >= '2014-09-03','2014-09-04','2014-09-05','2014-09-06' AND periode_fin <= '2014-09-03','2014-09-04','2014-09-05','2014-09-06')
韩国社交协会
编辑:解决方案
朋友找到解决方案:
每个日期dd.upto(df)!
很多
答案 0 :(得分:0)
total_price = 0
[start_date..end_date].each do |date|
rate = Rate.where('beginning_period >= ? AND ending_period <= ?',date,date).select{|r| r.in?(room.rates)}.first
total_price += rate.%_price * room.price
end
return total_price