预期ruby对象,得到String

时间:2014-07-22 02:25:49

标签: ruby-on-rails ruby string object tags

我正在尝试创建一个带有关联标签的歌曲,但我的create方法会抛出错误:

Tag(#70267554396440) expected, got String(#70267493763880)

我的歌曲#create:

def create
 tags = params[:song][:tag_list].split(", ")
 @song = current_user.songs.create(song_params)
 tags.each do |tag| 
   if Tag.find_by(:name => tag)
       @song.tags << tag
   else 
     @song.tags.create(:name => tag)
   end
 end
 flash[:success] = "You have successfully created a new track!"
 redirect_to @song
end

我该怎么办?问题似乎是在歌曲中添加现有标签。

2 个答案:

答案 0 :(得分:3)

您还可以使用find_or_create_by方法简化代码:

@song.tags << Tag.find_or_create_by(:name => tag.name)

查看this link以获取一些文档。

答案 1 :(得分:-1)

我们需要找到标签,然后在变量中设置它来调用它。

tags.each do |tag_name| 
  if t = Tag.find_by(:name => tag_name)
    @song.tags << t
  else 
    @song.tags.create(:name => tag_name)
  end
end