如何使用AJAX

时间:2016-01-21 14:50:44

标签: javascript jquery ruby-on-rails ruby ajax

我是编程新手,我不知道如何解决这个问题:

我在events\new.html.erb视图中有一个集合选择,客户可以在其中选择其他客户:

#events\new.html.erb
<%= f.collection_select :id,
                                    Customer.where(business_id: current_customer.business_id),
                                    :id,
                                    :full_name,
                                    { prompt: 'Select' },
                                    { id: "colleageselect", onChange: "renderColCal(this)" } %>


            <div id = colleaguecal>

            </div>

当用户单击一个名称时,它会触发一个客户端JavaScript函数,该函数创建一个变量colleagueID,我需要在Ruby服务器端使用该函数,以便从数据库中检索所选客户

#application.js

function renderColCal(select){

    var colleagueID = select.value ;


    document.getElementById("colleaguecal").innerHTML = "Your colleague's calendar:";

    $.ajax({
            url: 'calendars_controller/calendarChange',
            data: (
                'colleagueID=' + $('select').val()
            )
        }
    )
}

该变量在Calendars#calendarChange:

中被选中
def calendarChange
    colleagueID = params[:colleagueID]
    @colleague = Customer.where(id: :colleagueID)

    @colcalendar = @colleague.calendar
    @events = @colleague.calendar.events #sets the variables I need to use for the customer's calendar (_calendarChange.html.erb) that needs to be rendered within events\html.erb

  end

如何更改collection_select选项时,我的calendars\_calendarChange将使用日历#calendarChange中定义的events\html.erb变量在@events内呈现?

谢谢!

编辑:

明确我想要完成的事情:

我希望客户能够在collection_select中选择其他客户,并在同一页面上查看所选客户的日历。此日历需要@events才能成为所选客户的唯一身份。 (每个客户都有自己的日历和事件集)

1 个答案:

答案 0 :(得分:0)

如果我理解你想要完成的事情:

ruby / rails世界中,我们使用 snake case 命名我们的方法和变量。因此,此处calendarChange将成为calendar_change

当你的函数renderColCal被调用时,它会点击calender_change方法。

您需要在此处创建一个calendars/calendar_change.js.erb,以提供javascript功能作为回复。

日历/ calendar_change.js.erb

// put here whatever javascript you want
// You could also use ruby code by wrapping it with erb tags
// Here an example:
$("#wrapper").html("<%= escape_javascript(render @events ) %>")

更多信息here