【问题标题】:Ruby/Sinatra/DataMapper Many-to-Many how creating an objectRuby/Sinatra/DataMapper 多对多如何创建对象
【发布时间】:2012-01-20 15:19:58
【问题描述】:

我有 2 个名为 User 和 Gig 的类,还有一个连接表 Usergig。

  class Usergig
    include DataMapper::Resource
    property :id, Serial

    belongs_to :user
    belongs_to :gig
  end

  class Gig
    include DataMapper::Resource
    property :id, Serial
    property :gigname, String
    property :gigtext, Text

    has n, :usergigs
    has n, :users, :through => :usergigs
  end

  class User
    include DataMapper::Resource
    property :id, Serial
    property :username, String
    property :realname, String

    has n, :usergigs
    has n, :gigs, :through => :usergigs
  end

当我尝试运行时:

  post '/gig/add' do
    user = User.get(1)
    gig = user.gigs.create(:gigname => params[:gig_gigname], :gigtext => params[:gig_gigtext])
  end

我得到错误: /gig/add 处的 NoMethodError 未定义的方法“包括?”对于 nil:NilClass

我已经用谷歌搜索了大约两个小时,并阅读了 DataMapper 文档。 有谁知道我做错了什么?

【问题讨论】:

  • 我编辑了您的帖子以使其可读。你应该粘贴你的代码(没有行号,所以我们也可以复制/粘贴它!),然后选择它并按 CMD+K (Mac) 或 ctrl+K (PC)。
  • 你试过:through => Usergig吗?
  • 啊,谢谢!这是我的第一篇文章,我还在学习 :-) 它现在工作正常,顺便说一句。似乎也忘了使用DataMapper.finalize。非常感谢!! :-)

标签: ruby many-to-many sinatra datamapper


【解决方案1】:

在 Usergig 中尝试以下操作:

belongs_to :user, :key => true
belongs_to :gig, :key => true

【讨论】:

    【解决方案2】:

    您忘记调用 DataMapper.finalize...这是您在加载所有模型后需要调用的内容。 Rails 会为您执行此操作,在 Sinatra 中您必须手动调用它。

    【讨论】:

      猜你喜欢
      • 2012-07-05
      • 1970-01-01
      • 1970-01-01
      • 2013-05-07
      • 1970-01-01
      • 1970-01-01
      • 2014-10-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多