Ruby on rails 如何在ActiveRecord中保存具有多对多关系的标记
我正在尝试创建一个带有多对多标签的视频。因此,每个标记都是Ruby on rails 如何在ActiveRecord中保存具有多对多关系的标记,ruby-on-rails,ruby,ruby-on-rails-4,activerecord,Ruby On Rails,Ruby,Ruby On Rails 4,Activerecord,我正在尝试创建一个带有多对多标签的视频。因此,每个标记都是tag表中的每一行。我不确定我是否必须自己做,或者Rails有一些魔法可以做到这一点 这是我的模型 class Video < ActiveRecord::Base belongs_to :user has_many :video_tags has_many :tags, through: :video_tags end class Tag < ActiveRecord::Base end class Vid
tag
表中的每一行。我不确定我是否必须自己做,或者Rails有一些魔法可以做到这一点
这是我的模型
class Video < ActiveRecord::Base
belongs_to :user
has_many :video_tags
has_many :tags, through: :video_tags
end
class Tag < ActiveRecord::Base
end
class VideoTag < ActiveRecord::Base
belongs_to :video
belongs_to :tag
end
但后来我犯了一个错误,我想我一定错过了什么。我只想让标签用空格隔开
“视频”=>{“标题”=>“asdfasdf”,
“路径”=>“//s3.amazonaws.com/uploads/token/57203191c21df0cacf98f3fa9340f4.mp4”,
“标记”=>“测试”},“提交”=>“创建视频”}
在3毫秒内完成500个内部服务器错误
NoMethodError (undefined method `each' for "test ":String):
app/controllers/videos_controller.rb:14:in `create'
我觉得很有帮助。是的,rails有一种特殊的方法来处理这个问题。这些被称为嵌套模型,或者您也可以使用嵌套形式的gem 您可以对和使用
接受嵌套的属性
<%= f.fields_for :tags, @_your_tags do |t| %>
而不是
<div class="field">
<%= f.label :tags %><br>
<%= f.text_field :tags %>
</div>
您的关联如下:
class Video < ActiveRecord::Base
belongs_to :user
has_many :video_tags
has_many :tags, through: :video_tags
end
class VideoTag < ActiveRecord::Base
belongs_to :video
belongs_to :tag
end
class Tag < ActiveRecord::Base
has_many :video_tags
has_many :videos, through :video_tags
end
class-Video
当您试图从UI创建视频时,是否可以发布您的服务器日志?更新了问题。我没有在视频控制器的第14行中看到每个。你的问题中有什么东西没有贴在这里吗?我感觉你把你的联系搞砸了。@SharvyAhmed我想是的。我是新来的罗。我想要的是,用户有许多视频,一个视频有许多标签,其中一个标签属于许多视频。这是否意味着我有多个文本字段?是的,有多个文本字段。但是使用一些jQuery输入的标记将帮助您为单个文本字段添加标记,而不是为f.fields\u添加标记。只有参数需要像,{videos=>{tags=>['a',b']}}
<%= f.fields_for :tags, @_your_tags do |t| %>
<div class="field">
<%= f.label :tags %><br>
<%= f.text_field :tags %>
</div>
class Video < ActiveRecord::Base
belongs_to :user
has_many :video_tags
has_many :tags, through: :video_tags
end
class VideoTag < ActiveRecord::Base
belongs_to :video
belongs_to :tag
end
class Tag < ActiveRecord::Base
has_many :video_tags
has_many :videos, through :video_tags
end