簡體   English   中英

如何在我的JavaScript Ajax中將Rails路由用於單個資源?

[英]How to use a rails route for a singular resource in my javascript ajax?

目前,我有以下(工作)代碼:

# app/assets/javascripts/show_group_members.js.erb
...
var gid= $(this).data("id");
...
$.ajax({
  type: "GET",
    url: "/groups/"+gid,
    contentType: "application/json; charset=utf-8",
    dataType: "json", 
    ...

但我想將路由用於單個組資源,即

group GET      /groups/:id(.:format)                      groups#show

所以我想用

    url: <%= Rails.application.routes.url_helpers.group_path %> + gid,

但我越來越

No route matches {:action=>"show", :controller=>"groups"} 
missing required keys: [:id]
(in /home/durrantm/.../linker/app/assets/javascripts/show_group_members.js.erb)

[更新]這里的復雜之處在於視圖內容本身是由.js.erb模板生成的,因此我仍然不能在其中使用group_path(group)。

有資源時如何在js中使用路由?

順便說一句我也試過了

url: <%= Rails.application.routes.url_helpers.group_path %>,
         data: { id: gid },

我認為您做錯了。 我會忘記將Rails代碼放入js並將數據傳遞給URL。 因此,您可以將Rails代碼與JS分開,並避免在資產編譯過程中出現問題(例如,沒有請求時主機是什么?)。

# view
<span data-link-url="<%= group_path(group.id) %>"></span>

# js
var link = $(this).data("link-url");
...
$.ajax({
  type: "GET",
  url: link,
  contentType: "application/json; charset=utf-8",
  dataType: "json",
...

使用<a href="your_link_to_group_here">

<%= link_to 'my link', group_path(group.id) %>

var link = $(this).attr('href');

另一種方法是使用js-routes

安裝gem:

gem "js-routes"

將其包含在application.js文件中:

/*
= require js-routes
*/

然后,您可以執行以下操作:

# app/assets/javascripts/show_group_members.js
...
var gid= $(this).data("id");
...
$.ajax({
  type: "GET",
    url: Routes.group_path(gid),
    contentType: "application/json; charset=utf-8",
    dataType: "json", 
    ...

即使是單個資源,路由助手仍需要將resource傳遞給它。 因此,您的路線應該像

Rails.application.routes.url_helpers.group_path(group)

group是存儲紅寶石對象的變量。

雖然就我個人而言,我更喜歡@konole的方法。

由於HTML本身很復雜,它本身是由js生成的(即,當我通過Ajax單擊“成員”鏈接時,便獲得了該組的鏈接列表。

所以最后我使用了:

    ...
    url: "<%= Rails.application.routes.url_helpers.groups_path %>" + "/" + gid,
    ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM