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_id还有另一种通过 AJAX 调用传递参数的方法吗?

理想情况下,我希望 AJAX 调用返回餐厅 ID 的整数值。

PS——这是我在最初的 SO 帖子中提出的关于我试图克服的问题的替代解决方案。


编辑 1

我现在对使用 GET/POST 所做的事情有了更好的理解(我希望),所以我重新定义了我的方法:

成分控制器.rb

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

但我得到一个Template is missingand 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_controllerfrom 中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 回答