Ruby on rails - 使用AJAX

时间:2015-11-03 12:06:40

标签: ruby-on-rails ajax twitter-bootstrap ruby-on-rails-4

在我的'event#show'页面上,我有一个按钮,用户可以在该按钮上购买该活动的特定期限。在那之下我有@term对象列表(每个对象都有:event_id,:datetime,:max_capacity)。当用户购买该活动时,他实际上正在购买@term。我正在使用以下代码显示它:

        <div class="list-group">
            <% @terms.each_with_index do |term, i| %>
                 <% if i == 0 %>
                    <a href="#" class="list-group-item active">
                <% else %>
                    <a href="#" class="list-group-item">
                <% end %>
                        <h4 class="list-group-item-heading">Starts in <%= distance_of_time_in_words(Time.now, term.date_on)  %></h4>
                        <p class="list-group-item-text">Maximum capacity: <%= term.maximum_capacity %></p>
                        <p class="list-group-item-text">Date: <%= term.date_on %></p>
                    </a>
            <% end %>
        </div>

这就是它的样子:

enter image description here

在我的event.rb中我(它将被重构):

def seats
    ["1", "2", "3"]
end
def total_price
    if self.seleced_seats == "1"
        self.price
    elsif self.seleced_seats == "2"
        self.price + self.price
    elsif self.seleced_seats == "3"
        self.price + self.price + self.price
    else
        self.price
    end
end

在我的events_controller.rb中,我有:

  def price
    @event.seleced_seats = params[:edition]
    respond_to do |format|
        format.json {render json: @event, methods: [:total_price], only: []}
    end
  end

在price_calculation.js中我有:

$(function() {
    $("#event_seleced_seats").change(function(){
        var seleced_seats = $(this).val();  

        jQuery.getJSON(window.location.href + "/price", {edition: seleced_seats}, function(data) {
            $("#price").text(data.total_price);
            console.log(data.total_price);

        });
    });
});

我想要的是:

  1. 当用户点击非活动的“list-group-item”时,我想选择它(不重新加载页面)
  2. 然后我需要根据免费座位在“多少座位”下重新绘制收藏
  3. 当用户点击“购买”时,我需要知道哪个@term对象是“活动的”。
  4. 您会建议采用什么方法?

1 个答案:

答案 0 :(得分:1)

我要添加的链接标记中的

data-term-id=<%= term.id %>

作为on click事件,只需添加一个这样的活动类:

$(".list-group-item").on('click', function(){
  $(".list-group-item").removeClass('active')
  $(this).addClass('active')
})

点击购买后,您可以找到active元素及其ID