Datamapper:重命名has n关系键

时间:2013-10-29 18:46:33

标签: ruby associations ruby-datamapper

我正在尝试创建一组模型来表达用户作者帖子的帖子和用户,也可以像帖子一样。以下代码似乎生成了正确的SQL表集,但是由于User:posts键中的冲突导致最后一次查找失败 - 但我尝试重命名它的所有尝试都失败/破坏了架构。

如何将用户(对于喜欢)的帖子重命名为:post_likes而不会破坏其他内容?

require 'data_mapper'
require 'dm-sqlite-adapter'
require 'dm-noisy-failures'

DataMapper::Logger.new($stdout, :debug)
DataMapper::setup(:default, 'sqlite::memory:')

class Post
    include DataMapper::Resource
    belongs_to :author, 'User', :child_key => :author_id

    property :id,          Serial, :key => true
    property :message,     Text

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

class User
    include DataMapper::Resource

    property :id,    Serial, :key => true
    property :name,  String

    has n, :posts, :via => :author

    has n, :post_likes
    has n, :posts, :through => :post_likes # rename this to :post_likes
end

class PostLike 
    include DataMapper::Resource

    belongs_to :post, :key => true
    belongs_to :user, :key => true
end

DataMapper.finalize
DataMapper.auto_migrate!

john  = User.first_or_create(:name => 'John')
hello = Post.create(:message => 'Hello', :author => john)
tony  = User.create(:name => 'Tony')
fav   = PostLike.create(:user => tony, :post => hello)

puts tony.post_likes.first.post.to_json  # OK
puts hello.post_likes.first.user.to_json # OK
puts Post.first(:author => john).to_json # OK
puts john.posts.first.to_json            # fails (tries to look up via likes)

最后两个查询(第二个应与第一个相同):

 ~ (0.000000) SELECT "id", "message" FROM "posts" WHERE "id" = 1 ORDER BY "id"                                       
{"id":1,"message":"Hello","author_id":1}                                                                             
 ~ (0.000998) SELECT "posts"."id", "posts"."author_id" FROM "posts" INNER JOIN 
              "post_likes" ON "posts"."id" = "post_likes"."post_id" INNER JOIN 
              "users" ON "post_likes"."user_id" = "users"."id" WHERE 
              "post_likes"."user_id" = 1 GROUP BY "posts"."id", "posts"."author_id" 
              ORDER BY "posts"."id" LIMIT 1                                                     
null                                                                                                                 

0 个答案:

没有答案