我正在使用预订系统,我遇到了限制的问题..我有一些别墅空置的列表...一个工作系统我swhen客户预留一个山寨空置的山寨需要的数量减少..请帮助我,我在这里有一些我开始的代码...和一个图像,以帮助您理解我的解释..
我想在这里完成的是:
预订前:小屋可用性:5
如果我填写信息&选择“小山寨”并创建预订,可用性值为-1。
预订后:小屋可用性:4
form.html.erb
<%= form_for(@reservation) do |f| %>
<%= f.label :reservation_date %><br>
<%= f.date_select :reservation_date %>
<%= f.label :customer_name %><br>
<%= f.text_field :customer_name %>
<%= f.label :address%><br>
<%= f.text_field :address %>
<%= f.label :contact_no %><br>
<%= f.text_field :contact_no %>
<%= f.label :cottage_class %><br>
<%= f.select :cottage_id, options_for_select( Cottage.all.map { |g| [g.name, g.id]}) %>
<%= f.submit %>
<% end %>
schema.rb
ActiveRecord::Schema.define(version: 20160514141006) do
create_table "cottages", force: :cascade do |t|
t.string "name"
t.string "rates"
t.integer "no_of_vacant_cottage"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "reservations", force: :cascade do |t|
t.date "reservation_date"
t.string "customer_name"
t.string "address"
t.string "contact_no"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "cottage_id"
end
add_index "reservations", ["cottage_id"], name: "index_reservations_on_cottage_id"
end
reservation.rb
class Reservation < ActiveRecord::Base
validates :customer_name, :presence => true
validates :address, :presence => true
validates :contact_no, :presence => true
belongs_to :cottage
end
cottage.rb
class Cottage < ActiveRecord::Base
has_many :reservations
end
答案 0 :(得分:0)
我不一定会看到你尝试做的事情的重点,但我仍然会尝试回答你的具体问题。
首先,我们要将空置别墅的数量初始化为5,为此您可以创建可以放置的桌子:
create_table "cottages", force: :cascade do |t|
# ...
t.integer "no_of_vacant_cottage", default: 5
#...
end
或者,如果您无法直接更改迁移,则可以进行迁移,尤其是对此进行迁移:
change_column :cottages, :no_of_vacant_cottage, :integer, :default => 5
好的,现在我们的no_of_vacant_cottage
列默认设置为5.现在,无论何时进行新的预订,您都希望将相应的平房的no_of_vacant_cottage列减少1.您可以使用{ {3}}为此。你可能想要的是after_save
。
因此,在您的预订模型中,您将看到如下内容:
class Reservation < ActiveRecord::Base
validates :customer_name, :presence => true
validates :address, :presence => true
validates :contact_no, :presence => true
belongs_to :cottage
after_save :decrement_no_of_vacant_cottage
def decrement_no_of_vacant_cottage
c = self.cottage
c.update(no_of_vacant_cottage: c.no_of_vacant_cottage -1)
end
end
请注意,每次预订保存时都会执行此操作,即使您更改了预订的cottage_id,旧的小屋仍会保留他的&#34; -1&#34; 。既然你知道回调是什么,我会让你处理这些案件。
您在评论中添加了一些问题&#34;在预订后或c.update之后通知客户的代码(可用性:c.availability - 1)消息/通知此消息如&#34;感谢您您的预订&#34; &#34 ;.这非常简单,您只需在控制器中处理该逻辑即可。所以在你的控制器里你可能有类似的东西:
if @reservation.save
# some code
else
# handle the unsuccessful save
end
那将成为:
if @reservation.save
notification_function
# notification_function could be for instance flash[:notice]="Thank you for your reservation."
# additional code code
else
# handle the unsuccessful save
end