0

私はこのSOの答えに従っているので、定義したこのメソッドを呼び出そうとしています:

class IngredientsController < ApplicationController
  ...
  def get_restaurant_id(menu_id)
    Menu.find_by_id(menu_id).restaurant_id.to_i
  end

AJAX 呼び出しを介して:

m_id = $('#dish_menu_id').val()
$.ajax "/ingredients/get_restaurant_id(" + m_id + ")"

私は自分のroutes.rbを次のように定義しました:

resources :ingredients do
  get :get_restaurant_id, on: :collection
end

しかし、私console.log($.ajax "/ingredients/get_restaurant_id(" + m_id + ")")はこのエラーメッセージを表示します:

GET http://localhost:3000/ingredients/get_restaurant_id(1) 404 (Not Found) 

何が間違っているのかわかりません。m_idAJAX 呼び出しを介してパラメーターを渡す別の方法はありますか?

理想的には、AJAX 呼び出しでレストラン ID の整数値を返すようにしたいと考えています。

PS - これは、私が克服しようとしていた問題について、元の SO 投稿に思いついた代替ソリューションです。


編集 1

GET/POST で何をしているのかについて少し理解が深まったので (願わくば)、メソッドを次のように再定義しました。

components_controller.rb

def get_restaurant_id
  Menu.find_by_id(params[:m_id]).restaurant_id
end

しかし、私は と を取得しTemplate is missingます500 Internal Server Error

これにはテンプレートがないことがわかりました。単純な SQL クエリを実行してレストラン ID を取得し、それを Ajax 呼び出しに返す方法はありますか?

したがって、私の Ajax 呼び出しは次のようになります。

$.ajax "/ingredients/get_restaurant_id?m_id=" + m_id

編集2:ほぼそこ

メソッドを次のように変更しました。

def get_restaurant_id
  menu_id = params[:m_id]    
  r_id = Menu.find_by_id(params[:m_id]).restaurant_id.to_s
  render :json => r_id 
end

そして今、私のAjaxではObject、フィールド内に答えがあるが、responseTextそれにアクセスできないようです。

私はこれを試しました:

r_id = $.ajax "/ingredients/get_restaurant_id?m_id=" + m_id
alert "After call to get_restaurant_id " + r_id.responseText

しかし、それを取得しundefinedます。

私のObjectコンソールログは次のようになります。

...
readyState: 4
responseText: "1"
setRequestHeader: function ( name, value ) {
...
4

1 に答える 1

0

私はそれを理解することができました。これが私がしたことです:

restaurant_controller.rb

def get_restaurant_id 
  r_id = Menu.find_by_id(params[:m_id]).restaurant_id.to_s
  render :json => r_id 
end

メソッドをrestaurants_controllerからに移動しているので、この変更を反映するingredients_controllerように も更新してください。routes.rbしたがって、次のようになります。

resources :restaurants do
  get :get_restaurant_id, on: :collection
end

私のjQuery/Ajaxは次のようになりました:

m_id = $('#dish_menu_id').val() # To get the menu_id from the dropdown menu
r_id = "" # restaurant_id variable

# Call my get_restaurant_id method
request = $.ajax
  type: 'GET'
  url: "/restaurants/get_restaurant_id?m_id=" + m_id
  async: false
  success: (text) ->
    r_id = text

  console.log(request) # Just for programming purpose to show what I'm getting from AJAX

r_idこれで、の整数値が保持されますrestaurant_id

于 2012-08-10T22:36:52.617 に答える