lxf_chn_1 2010-01-31 15:23
浏览 523
已采纳

(Ruby on rails) 错误“NoMethodError (undefined method `on' for #<Tag id:, name:>)”

安装了acts_as_taggable_on_steroids插件(ruby 1.8.6, rails 2.0.2),其中模型代码bookmark.rb包括:
def tag_with(tags) (bookmark.rb第27行)
Tag.transaction do
taggings.destroy_all
tags.each { |name| Tag.find_or_create_by_name(name).on(self) }

end
end

程序主要实现为网页添加标签,在运行时发生错误,其中log记录如下:
####################################################################################################
NoMethodError (undefined method on' for #<Tag id: 16, name: "good,god">):
C:/INSTAN~1.0-W/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/attribute_methods.rb:205:in
method_missing'
/app/models/bookmark.rb:29:in tag_with'
/app/models/bookmark.rb:29:in
each'
/app/models/bookmark.rb:29:in tag_with'
C:/INSTAN~1.0-W/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/connection_adapters/abstract/database_statements.rb:66:in
transaction'
C:/INSTAN~1.0-W/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/transactions.rb:80:in transaction'
/app/models/bookmark.rb:27:in
tag_with'
/app/controllers/bookmarks_controller.rb:40:in `create'

####################################################################################################
在控制器bookmark_controller.rb中调用方法tag_with:

POST /users/{username}/bookmarks

def create
bookmark = Bookmark.find_by_user_id_and_uri(params[:bookmark][:user_id],
params[:bookmark][:uri])
if bookmark
# This user has already bookmarked this URI. They should be
# using PUT instead.
headers['Location'] = bookmark_url(@user.name, bookmark.uri)
render :nothing => true, :status => "409 Conflict"
else
# Enforce default values for 'timestamp' and 'public'
params[:bookmark][:timestamp] ||= Time.now
params[:bookmark][:public] ||= "1"

  # Create the bookmark in the database.
  bookmark = Bookmark.new(params[:bookmark])
  if bookmark.save
    # Add tags.
    bookmark.tag_with(params[:taglist]) if params[:taglist]  (调用方法tag_with)

    # Send a 201 response code that points to the location of the
    # new bookmark.
    headers['Location'] = bookmark_url(@user.name, bookmark.uri)
    render :nothing => true, :status => "201 Created"
  else
    render :xml => bookmark.errors.to_xml, :status => "400 Bad Request"
  end
end

end

展开全部

  • 写回答

4条回答 默认 最新

  • weixin_42355801 2010-02-02 23:54
    关注

    我觉得你应该重新安装acts_as_taggable插件,毕竟它和acts_as_taggable_on_steroids插件有不少不同的地方。http://thegiive.iteye.com/blog/75716介绍如何使用插件acts_as_taggable。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)
编辑
预览

报告相同问题?

悬赏问题

  • ¥15 下面三个文件分别是OFDM波形的数据,我的思路公式和我写的成像算法代码,有没有人能帮我改一改,如何解决?
  • ¥15 Ubuntu打开gazebo模型调不出来,如何解决?
  • ¥100 有chang请一位会arm和dsp的朋友解读一个工程
  • ¥50 求代做一个阿里云百炼的小实验
  • ¥20 DNS服务器所在的国家不同与你的IP地址所在国家
  • ¥15 查询优化:A表100000行,B表2000 行,内存页大小只有20页,运行时3页,设计两个表等值连接的最简单的算法
  • ¥15 led数码显示控制(标签-流程图)
  • ¥20 为什么在复位后出现错误帧
  • ¥15 结果有了,想问一下这个具体怎么输入
  • ¥15 怎么修改鸿蒙app的UI及功能设计
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部