我有点不清楚控制器如何知道返回JS文件而不是HTML(来自Railscast#174 Pagination)

时间:2014-03-30 02:25:17

标签: ruby-on-rails

在这个Railscast#174分页教程中,作者改变了......

$(function() {

  $(".pagination a").click(function() { // e.g. a.href = /transactions?page=x
    $.get(this.href, null, null, "script");
    return false;
  });

});

当我的控制器收到此请求时,它返回JS文件(index.js.erb - 我自己根据教程添加了这个)。我理解"脚本"参与者有所作为,但我无法找出正在发生的事情。

控制器:

def index
    # fetch arrays
    @funds = current_user.funds

    # set session vars
    set_filter_date_session_variable(:transactions_filter_date_from) # to db format
    set_filter_date_session_variable(:transactions_filter_date_to) # to db format

    if @fund = current_fund
      @transactions = @fund.transactions
        .where("date >= ? AND date <= ? AND amount < 0", session[:transactions_filter_date_from], session[:transactions_filter_date_to])
        .order("date DESC, id DESC")
      ## perform a paginated query:
      @transactions = @transactions.paginate(:page => params[:page], :per_page => 5)
    else 
      @transactions = []
    end

    @categories = current_user.categories.order(:name)

    @transactions_filter_date_from = convert_date(session[:transactions_filter_date_from], "%Y-%m-%d", "%d/%m/%Y")
    @transactions_filter_date_to = convert_date(session[:transactions_filter_date_to], "%Y-%m-%d", "%d/%m/%Y")

  end

&#34;脚本&#34;参数get在请求标头中传递?以前我认为控制器查看了请求文件扩展名,可能默认为.html(所以如果我请求 file .json,它会从扩展名中知道它应该返回json视图)。有人可以澄清一点,或指导我某个地方,我可以理解控制器如何处理在这种情况下返回的视图。我想完全理解这一部分。

由于

1 个答案:

答案 0 :(得分:0)

使用

$.get(this.href, null, null, "script");

您从服务中请求它返回javascript文件,因此"script"为什么 通常情况下,您会注意到有时候人们在控制器中包含format.js,这样当您输入网址+&#34;。&#34; +&#34;格式类型&#34; (例如。reports.csvreports.html)您需要在控制器中包含以下代码(如果您的控制器未设置为带回该信息,则您无法请求json )

respond_to do |format|
 format.html
 format.js
end

如果您没有在控制器中包含该格式,则上面的get函数中的"script"要求使用js文件进行响应。因此,为什么你的js代码被执行而不是你的html。如果您要求输入html,请查看会发生什么。

希望有道理吗?

我推断出这个结论是因为我使用jQuery的函数getScript看起来像这样:

$.getScript(this.href);