如何通过AJAX POST请求在HABTM关系中关联两个对象

史蒂芬·利德

仅在通过JSON POST创建新对象时,我无法将HABTM关系中的一个对象与另一个对象关联(该关系在使用Rails控制台时按预期工作)。

要重现:我创建了一个带有视频(具有标题和URL)和播放列表(具有名称)的示例项目:

rails new videotest
cd videotest
rails g scaffold video title:string url:string
rails g scaffold playlist name:string
rails g migration create_playlists_videos playlist_id:integer video_id:integer
rake db:migrate

在模型之间设置has_and_belongs_to_many关系:

class Playlist < ActiveRecord::Base
  has_and_belongs_to_many :videos
end

class Video < ActiveRecord::Base
  has_and_belongs_to_many :playlists
end

在视频控制器中,我将playlist_ids参数列入白名单:

def video_params
  params.require(:video).permit(:title, :url, playlist_ids: [])
end

然后在Rails控制台中创建一些示例对象:

Video.create!(title:"video1", url:"http://youtube.com/123")
Video.create!(title:"video2", url:"http://youtube.com/456")

@playlist = Playlist.create(name:"playlist1")
@playlist.videos.append([Video.first, Video.second])

Playlist.first.videos.count 返回预期的2,表明HABTM关系已正确配置。

我可以使用AJAX POST请求成功创建一个新的Video对象,在这里我还对第一个播放列表的ID进行了硬编码:

data =   JSON.stringify({
  "title": "test video",
  "url": "http://www.youtube.com/987",
  "playlist_ids": [1]
});

$.ajax({
  url: "http://" + window.location.host + "/videos.json",
  type:"POST",
  contentType:"application/json; charset=utf-8",
  dataType:"json",
  data: data,
  success: function(msg) {
    console.log("added " + msg.title)
  }
});

问题:未使用playlist_id,并且生成的Video对象未与Playlist 1关联。

create方法包括:

def create
    @video = Video.new(video_params)

我注意到其中video_params不包含playlist_id,但包含params

(byebug) video_params
{"title"=>"test video", "url"=>"http://www.youtube.com/987"}
(byebug) params[:playlist_ids]
[1]

为什么不playlist_ids通过白名单?

拉尔科姆

如果这些关联设置正确,则您的播放列表模型应具有video_ids属性,而您的视频模型应具有playlist_ids属性。

您可以通过表单传递这些内容,并且rails应该在playlists_videos链接表中创建相应的记录。

因此,在您的VideosController中,像这样设置您的白名单:

def video_params
  params.require(:video).permit(:title, :url, playlist_ids: [])
end

现在调整您的ajax调用,使其像这样通过playlist_ids数组:

JSON.stringify({ "video": {"title": title, "url": "http://www.youtube.com", "playlist_ids": [1,2]}})

记住将参数嵌套在“视频”节点内。

因此,在这种情况下,例如,您要将视频与playlist_id 1和playlist_id 2相关联。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何通过键值对关联两个JSON对象?

来自分类Dev

如何使用 json 通过 ajax 填充两个 <selects>

来自分类Dev

Django:如何通过一个POST请求将数据保存到两个模型(表)中?

来自分类Dev

如何正确关联这两个对象?

来自分类Dev

如何通过Ajax API处理多个请求?

来自分类Dev

如何通过Ajax请求传递查询

来自分类Dev

如何通过 AJAX 请求执行连接查询

来自分类Dev

我如何通过$ .ajax(...)传递FormCollection对象

来自分类Dev

如何限制通过ajax发布的JS对象

来自分类Dev

如何通过JPA / Hibernate加入获取两个关联

来自分类Dev

如何通过两个嵌套关联对集合进行排序

来自分类Dev

如果在一个模型中有两个HABTM关系,如何保存数据?

来自分类Dev

如何通过两个参数发出POST请求(MERN堆栈)

来自分类Dev

如何在JavaScript中关联两个输入?

来自分类Dev

如何关联 MongoDB 中的两个集合

来自分类Dev

如何在POST请求中发送两个正文?

来自分类Dev

如何通过迭代getDerivedStateFromProps中两个对象的名称相同来比较两个对象的值?

来自分类Dev

如何识别在Python Flask中通过AJAX发出的请求?

来自分类Dev

如何发出ajax请求以在一个模板中获得两个不同的视图

来自分类Dev

如何在mysql中实现两个表之间的两个关联

来自分类Dev

具有1:N关系的两个实体之间如何关联?

来自分类Dev

如何为具有相同关系的两个外键的模型编写关联?

来自分类Dev

具有1:N关系的两个实体之间如何关联?

来自分类Dev

如何在Javascript类中通过Ajax发送对象?

来自分类Dev

如何通过单个请求调用两个AWS方法?

来自分类Dev

如何通过JavaScript中的两个对象创建新对象

来自分类Dev

通过ajax发送两个变量

来自分类Dev

通过ajax发送两个变量

来自分类Dev

如何通过ajax调用将图像和数据作为两个不同的参数发送?

Related 相关文章

  1. 1

    如何通过键值对关联两个JSON对象?

  2. 2

    如何使用 json 通过 ajax 填充两个 <selects>

  3. 3

    Django:如何通过一个POST请求将数据保存到两个模型(表)中?

  4. 4

    如何正确关联这两个对象?

  5. 5

    如何通过Ajax API处理多个请求?

  6. 6

    如何通过Ajax请求传递查询

  7. 7

    如何通过 AJAX 请求执行连接查询

  8. 8

    我如何通过$ .ajax(...)传递FormCollection对象

  9. 9

    如何限制通过ajax发布的JS对象

  10. 10

    如何通过JPA / Hibernate加入获取两个关联

  11. 11

    如何通过两个嵌套关联对集合进行排序

  12. 12

    如果在一个模型中有两个HABTM关系,如何保存数据?

  13. 13

    如何通过两个参数发出POST请求(MERN堆栈)

  14. 14

    如何在JavaScript中关联两个输入?

  15. 15

    如何关联 MongoDB 中的两个集合

  16. 16

    如何在POST请求中发送两个正文?

  17. 17

    如何通过迭代getDerivedStateFromProps中两个对象的名称相同来比较两个对象的值?

  18. 18

    如何识别在Python Flask中通过AJAX发出的请求?

  19. 19

    如何发出ajax请求以在一个模板中获得两个不同的视图

  20. 20

    如何在mysql中实现两个表之间的两个关联

  21. 21

    具有1:N关系的两个实体之间如何关联?

  22. 22

    如何为具有相同关系的两个外键的模型编写关联?

  23. 23

    具有1:N关系的两个实体之间如何关联?

  24. 24

    如何在Javascript类中通过Ajax发送对象?

  25. 25

    如何通过单个请求调用两个AWS方法?

  26. 26

    如何通过JavaScript中的两个对象创建新对象

  27. 27

    通过ajax发送两个变量

  28. 28

    通过ajax发送两个变量

  29. 29

    如何通过ajax调用将图像和数据作为两个不同的参数发送?

热门标签

归档