对于乱糟糟的标题感到抱歉,但我甚至不知道如何正确解释我的问题..
我有一个带有预订表单的rails应用程序,其中包含一个字段“total_price”。 表单可以添加/删除客房 茧宝石 https://github.com/nathanvda/cocoon(ajax)房间模型有一个字段“价格”。
如何根据房间数量和选择的类型更新字段total_price?
保留/ new_html.erb
<%= simple_form_for @reservation do |f| %>
<%= f.error_notification %>
<fieldset>
<%= f.input :date_from, as: :string, input_html: { class: 'date', id: 'checkin', :placeholder => 'From' }, :label => false %>
<%= f.input :date_to, as: :string, input_html: { class: 'date', id: 'checkout', :label => false %>
<div id="rooms">
<%= f.fields_for :entries do |entry| %>
<%= render 'entry_fields', :f => entry %>
<% end %>
<%= link_to_add_association 'add room', f, :entries %>
</div>
<%= f.input :total_price, :label => false %>
</fieldset>
<%= f.button :submit %>
<% end %>
保留/ _entry_fields.html.erb
<div class="nested-fields">
<div class="field">
<%= f.association :rooms, input_html: { class: 'room-select' }, :label => false %>
<%= f.number_field :number_of_rooms, input_html: { class: 'room-count' }, :label => false %>
<%= link_to_remove_association "Remove room", f %>
</div>
</div>
ReservationsController
class ReservationsController < ApplicationController
def new
@reservation = Reservation.new
end
def create
@reservation = Reservation.new(reservation_params)
if @reservation.save
redirect_to root_path, :notice => "Booking Confirmed"
else
render "new"
end
end
private
def reservation_params
params.require(:reservation).permit(:date_to, :date_from, entries_attributes: [ :reservation_id, :number_of_rooms, :_destroy, :room_ids => []])
end
end
我的apps / assets / javascript / application.js是空的,除了包括jquery和cocoon
Cocoon确实支持回调,但我非常有限的JS知识无法提供解决方案。
任何指导都会受到很大关注, 谢谢你的时间
答案 0 :(得分:0)
好吧,当您添加新房间时,总价格不会改变,当您选择房间或房间数时它会改变(我假设选择房间实际上选择了一个类型)。
所以你可以使用简单的jquery。
当您动态移除房间时,总价格会发生变化,您应该使用cocoon:after_remove
回调。
回顾:
.room-select
或.room-count
收到change
事件时 - >重新计算总价cocoon:after-remove
事件时 - &gt;重新计算总价