我已经彻底搜索了stackoverflow并尝试了所有已经出现的结果,但我仍然卡住了。这是问题所在。
我有一个允许我上传音乐文件的应用。上传文件后,我扫描ID3数据并使用该数据填充数据库中对象的所有各种信息....例如标题,专辑,年份,流派等。
艺术家领域有时候会有很多艺术家,所以在这个领域我写了一个方法,让所有艺术家和哈希就这样;
{:artist => [{:name=>"Artist 1"},{:name=>"Artist 2"}]}
此数据现在包含在我要保存到我的数据库的对象中,如下所示;
#<Track id: 76, name: nil, title: "song title", tpath: "file_name.mp3", created_at: "2013-06-08 23:31:24", updated_at: "2013-06-08 23:31:24", track_number: 6, artist: {:artist => [{:name=>"Artist 1"},{:name=>"Artist 2"}]}, album_artist: "Artist Name", year: 2012, genre: "nil", bpm: nil, length: 252, size: 79872, user_id: 2>
在我的tracks_controller中(所有操作都在进行中)我有这个用于我的创建操作;
def create
@track = Track.new(params[:track])
@track.libraries << @library
@track.parse_id3(@track)
@track.update_attributes(@track[:artist]) --># I also tried @track.artist
respond_to do |format|
if @track.save
format.html { redirect_to library_track_path(@library, @track), notice: 'Track was successfully created.' }
format.json { render json: @library_track, status: :created, location: @track }
else
format.html { render action: "new" }
format.json { render json: @track.errors, status: :unprocessable_entity }
end
end
端
问题在于,活动记录没有使用我提供的数据保存/更新我的艺术家(在艺术家表中),但是该曲目已成功保存到我的数据库中而没有错误。
我在艺术家和曲目之间建立了以下关系;
class Artist < ActiveRecord::Base
attr_accessible :age, :birthdate, :first_name, :last_name, :name
has_many :tracks, :through => :artist_tracks
has_many :artist_tracks
end
加入表似乎;
class ArtistTrack < ActiveRecord::Base
attr_accessible :album_artist, :artist_id, :track_id
belongs_to :artist
belongs_to :track
end
和Track一样;
class Track < ActiveRecord::Base
attr_accessible :name, :title, :tpath, :track_number, :artist, :album_artist,
:year, :genre, :bpm, :length, :size, :user_id, :artists_attrubutes
mount_uploader :tpath, TpathUploader
belongs_to :user
has_many :libraries, :through => :track_libraries
has_many :track_libraries
has_many :playlists, :through => :playlist_tracks
has_many :playlist_tracks
has_many :artists, :through => :artist_tracks
has_many :artist_tracks
accepts_nested_attributes_for :artists
end
唯一涉及的形式是带有单个字段的表单,询问要上载的文件的位置。
我在这里缺少什么?
感谢。
我得到了它的工作,这是需要的。
@track.update_attributes(:artists_attributes => @track.parse_id3(@track))
.parse_id3 是我编写的一种方法,用于扫描MP3艺术家字段中的所有艺术家并将其转换为;
:artists_attributes => [{:name=>"Artist 1"},{:name=>"Artist 2"}]}
我曾尝试过;
@track.update_attributes(:artists_attributes)
显然我需要添加 @ track.parse_id3(@track)这件作品。
感谢所有回复!
答案 0 :(得分:0)
我认为你的问题是错字:
artists_attrubutes
此外,在您的控制器中尝试写:
@track = Track.new params[:track]
@track.save
要使用它,您应该在视图中组织参数。
答案 1 :(得分:0)
我得到了它的工作,这是需要的。
@track.update_attributes(:artists_attributes => @track.parse_id3(@track))
.parse_id3 是我编写的一种方法,用于扫描MP3艺术家字段中的所有艺术家并将其转换为;
:artists_attributes => [{:name=>"Artist 1"},{:name=>"Artist 2"}]}
我曾尝试过;
@track.update_attributes(:artists_attributes)
显然我需要添加 @ track.parse_id3(@track)这件作品。
感谢所有回复!