Ruby 使用Sinatra将一个类关联到DataMapper中的两个不同类
我正在与DataMapper和Sinatra合作创建一个简单的应用程序。结构如下: 该应用程序具有多个帐户。每个帐户都有用户和活动。每个用户都有与特定活动相关的评论 理想情况下,评论应该有一个用户id和一个活动id,以便将两者联系起来 我如何将这两个词联系起来?以下是我的代码,但它不起作用:Ruby 使用Sinatra将一个类关联到DataMapper中的两个不同类,ruby,associations,sinatra,datamapper,Ruby,Associations,Sinatra,Datamapper,我正在与DataMapper和Sinatra合作创建一个简单的应用程序。结构如下: 该应用程序具有多个帐户。每个帐户都有用户和活动。每个用户都有与特定活动相关的评论 理想情况下,评论应该有一个用户id和一个活动id,以便将两者联系起来 我如何将这两个词联系起来?以下是我的代码,但它不起作用: class Account include DataMapper::Resource property :id, Serial property :mc_username, String, :r
class Account
include DataMapper::Resource
property :id, Serial
property :mc_username, String, :required => true
property :mc_user_id, String, :required => true
property :mc_api_key, String, :required => true
property :created_at, DateTime
property :updated_at, DateTime
has n, :users
has n, :campaigns
end
class User
include DataMapper::Resource
property :id, Serial
property :name, String, :required => true
property :email, String, :required => true
property :is_organizer, Integer
property :created_at, DateTime
property :updated_at, DateTime
belongs_to :account, :key => true
has n, :comments
end
class Campaign
include DataMapper::Resource
belongs_to :mailchimpaccount, :key => true
has n, :comments
property :id, Serial
property :cid, String
property :name, String
property :current_revision, Integer
property :share_url, Text, :required => true
property :password, String
property :created_at, DateTime
property :updated_at, DateTime
end
class Comment
include DataMapper::Resource
belongs_to :campaign, :key => true
belongs_to :user, :key => true
property :id, Serial
property :at_revision, Integer
property :content, Text
property :created_at, DateTime
end
使用这段代码,我无法保存注释,因为我不知道如何将其与活动和用户同时关联。我真的不知道我是否应该尝试使用DataMapper将它们联系起来
我很想知道这段代码是否正确,如何创建一条与这两者都相关的注释。如果不是,对于这种情况,什么样的结构和关联是最佳的
非常感谢你的帮助 您所做的似乎是合理的,我认为您只需要去掉
:key=>true
选项,因为您并不真的希望这些关联成为注释主键的一部分。您可能应该从查看这些选项开始
Alex是对的,你有一个复合主键。如果您只希望每个用户在每个活动中都有一条评论,这是可以的,但情况可能并非如此,但您确实希望确保该评论与用户和活动相关联,因此请使用required=>true,如下所示:
class Comment
include DataMapper::Resource
property :id, Serial
belongs_to :campaign, :required => true
belongs_to :user, :required => true
property :at_revision, Integer
property :content, Text
property :created_at, DateTime
end
此外,您在活动模型中的密钥可能存在问题:
class Campaign
include DataMapper::Resource
belongs_to :mailchimpaccount, :key => true
#......
你可能也只是想让它成为必需的。所以我的想法似乎是正确的。我可以通过以下方式将评论与用户和活动联系起来:
# Get a user and a campaign first that we can relate to the comment
user = User.get(user_id)
campaign = Campaign.get(campaign_id)
comment = Comment.new
comment.content = "The comment's content"
user.comments << comment # This relates the comment to a specific user
campaign.comments << comment # This now relates the comment to a specific campaign
comment.save # Save the comment
#首先获得一个用户和一个活动,我们可以将其与评论联系起来
user=user.get(user\u id)
活动=活动。获取(活动\u id)
comment=comment.new
comment.content=“评论的内容”
user.comments谢谢你的建议。将密钥更改为必填字段实际上相当大程度上清理了我的数据库模式!我将它们设置为键,因为在没有该选项的情况下,我一直会出错,但只要将字段设置为必需字段似乎就可以了。