我使用嵌套模型gem来创建可以带标签的图片。现在我已经为我的模型Picture添加了一个属性,因此它有一个属性标记列表。当我创建一个新标签时,我希望这种情况发生
class TagsController < ApplicationController
def create
@tag = Tag.new(params[:id])
if @tag.save
taglist = picture.taglist
taglist+=@tag.tagcontent
@tag.picture.update_attributes(:taglist => taglist)
end
end
end
和我的路线
resources :pictures do
resources :tags
end
当我创建一个新标签时,taglist属性中没有任何反应,就像什么都没发生一样,为什么?
答案 0 :(得分:1)
由于缺乏信息,很难提供帮助,但我发现了两个可能的问题:
Tag.new(params[:id])
没有意义。假设Tag继承自ActiveRecord :: Base,您需要传递一个属性哈希值(例如Tag.new(:name => 'mytag')
)由于验证错误,您可能根本不会进入if @tag.save
块。此外,您不需要为要创建的对象提供id。数据库选择id。
在块内,第一行未定义picture
。
为什么不尝试使用以下内容进行调试:
if @tag.save
taglist = picture.taglist
taglist+=@tag.tagcontent
@tag.picture.update_attributes(:taglist => taglist)
else
p "ERRORS:"
p @tag.errors.full_messages
end
查看打印到控制台的错误。
答案 1 :(得分:0)
我绝对认为该图片可能在控制器的create
方法中未定义。您能否向我们展示视图,您用来创建新标签的表单?是否有表单字段,您可以选择哪个照片获取标记?
请向我们展示创建新标记的关联和视图。
实际上,我真正推荐的不是烹饪自己,而是使用:
敏捷网站开发 acts_as_taggable_on_steroids
它是一个很好的插件,可以轻松进行标记;它内置了相当多的漂亮功能,包括搜索,标签云等。我们在项目中使用它。