2017-01-26 3 views
0

Если у меня есть URL-адрес, например localhost:3000?id=2, что мне нужно изменить, чтобы получить вызов AJAX для использования параметра?Как создать запрос AJAX в рельсах, который использует параметр из URL?

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" = $1[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 
+0

что у вас есть в маршрутах? – inye

+0

@inye обновил мое сообщение, чтобы включить маршруты – Ben

+0

вы читаете статью htis http://guides.rubyonrails.org/routing.html? – inye

ответ

1

Ваш URI для запроса Ajax не включает параметр. Вы звоните в index.json, а не index.json?id=1

+0

Я решил, что это будет так просто. Как woluld я захватываю параметр из URL-адреса для использования в json-вызове? что-то вроде 'index.json? id = param [: id]' – Ben

+0

Если ваша цель - получить параметры из URL-адреса и передать их в JS, это хороший способ сделать это: http://stackoverflow.com/questions/5448545/how-to-retrieve-get-parameters-from-javascript – Orlando

+0

Для тех, кто ищет «легкий» ответ, я закончил добавление следующих двух строк кода перед вызовом ajax 'paramsString = window.location.search .substr (1) ' ' searchParams = new URLSearchParams (paramsString) 'Затем я изменил' 'index.json'' на' 'index.json '+ searchParams' – Ben

Смежные вопросы