Rails模型创建功能

时间:2011-11-04 20:00:54

标签: ruby-on-rails ruby-on-rails-3 attributes routes

我使用嵌套模型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属性中没有任何反应,就像什么都没发生一样,为什么?

2 个答案:

答案 0 :(得分:1)

由于缺乏信息,很难提供帮助,但我发现了两个可能的问题:

  1. Tag.new(params[:id])没有意义。假设Tag继承自ActiveRecord :: Base,您需要传递一个属性哈希值(例如Tag.new(:name => 'mytag'))由于验证错误,您可能根本不会进入if @tag.save块。此外,您不需要为要创建的对象提供id。数据库选择id。

  2. 在块内,第一行未定义picture

  3. 为什么不尝试使用以下内容进行调试:

    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

它是一个很好的插件,可以轻松进行标记;它内置了相当多的漂亮功能,包括搜索,标签云等。我们在项目中使用它。