这里有很多stringify_keys问题,但是我找不到与我的问题的正确匹配,所以我至少会感谢任何匹配它的例子。
我有三个名为Song,Mixtape和MixtapeSong的模型。
class Song < ActiveRecord::Base
attr_accessible :duration, :name, :order
belongs_to :album
has_many :mixtape_songs
has_many :mixtapes, :through => :mixtape_songs
end
class Mixtape < ActiveRecord::Base
attr_accessible :description, :image, :name
has_many :mixtape_songs
has_many :songs, :through => :mixtape_songs
end
class MixtapeSong < ActiveRecord::Base
attr_accessible :mixtape_id, :order, :song_id
belongs_to :mixtape
belongs_to :song
end
当我通过rails控制台尝试下面的命令时,我成功将mixtape_songs表中的记录添加到mixtape_id和song_id值,但也添加了'order'NULL:
mtape = Mixtape.find(1)
song = Song.find(3)
mtape.songs << song
同时执行update_attributes失败并显示“Undefined method signify_keys”错误。
params = [:mixtape_id => 1, :song_id => 3, :order => 2]
mts = MixtapeSong.find(1)
mts.update_attributes(params)
我需要做的是通过Mixtape模型添加此关联并指定“顺序”值或通过MixtapeSong模型添加此关联而不使用“未定义方法signify_keys”错误。
我想正确的方法是通过Mixtape模型添加,但我无法弄清楚如何设置'顺序'?任何帮助表示赞赏。
答案 0 :(得分:0)
撷取:
mtape = Mixtape.find(1)
songs_in_proper_order = mtape.songs.order(mixtape_songs: :created_at)
交换:
MixtapeSong.transaction do
ms1 = MixtapeSong.find(1)
ms2 = MixtapeSong.find(2)
ms1.created_at, ms2.created_at = ms2.created_at, ms1.created_at
ms1.save
ms2.save
end