我将如何在 rails 中构建一个使用 URL 中的参数的 AJAX 请求?

How would I build an AJAX request in rails that uses a param from the URL?

如果我有一个像 localhost:3000?id=2 这样的 url,我需要更改什么才能让我的 AJAX 调用使用参数?

page_controller.rb

class PageController < ApplicationController
  def index
    @pId = params[:id]
    @p = Plant.where(id: @pId)
    
    respond_to do |format|
      format.json { render json: @p.to_json }
      format.html
    end
  end
end

page.coffee

$ ->
  $.ajax
    dataType: 'json'
    url: 'index.json'
    success: (data) ->
      alert "Data #{JSON.parse(data)} ---"

development.log 一页加载

Processing by PageController#index as HTML
  Parameters: {"id"=>"2"}
  Rendering page/index.html.erb within layouts/application
  [1m[36mPlant Load (1.0ms)[0m  [1m[34mSELECT "plants".* FROM "plants" WHERE "plants"."id" = [0m  [["id", 2]]
  Rendered page/index.html.erb within layouts/application (3.0ms)
Completed 200 OK in 80ms (Views: 69.5ms | ActiveRecord: 1.0ms)


Started GET "/index.json" for ::1 at 2017-01-26 08:07:18 -0800
Processing by PageController#index as JSON
  [1m[36mPlant Load (1.0ms)[0m  [1m[34mSELECT "plants".* FROM "plants" WHERE "plants"."id" IS NULL[0m
Completed 200 OK in 5ms (Views: 0.1ms | ActiveRecord: 1.0ms)

这只是从一段更复杂的代码中提取的一个非常基本的示例。我的原始代码中的所有内容都有效,但我尝试访问参数时除外。

更新 1

routes.rb

Rails.application.routes.draw do
  get 'index' => 'page#index'
  root "page#index"
end

您的 Ajax 请求的 URI 不包含该参数。您拨打的是 index.json 而不是 index.json?id=1