使用多对多关联时未定义的方法'stringify_keys'错误

时间:2012-05-20 19:03:01

标签: ruby-on-rails ruby-on-rails-3 associations

这里有很多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模型添加,但我无法弄清楚如何设置'顺序'?任何帮助表示赞赏。

1 个答案:

答案 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