[英]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.