我只是在构建一个简单的博客时盯着学习Sinatra和DataMapper。我似乎遇到了让我的多对多协会工作的问题。我正在尝试将类别与帖子相关联。创建帖子后,不会创建类别关联。
以下是我的模特:
class Post
include DataMapper::Resource
has n, :categories, :through => Resource
property :id, Serial
property :title, String
property :slug, String
property :body, Text
property :description, Text
property :created_at, DateTime
property :updated_at, DateTime
property :posted_at, DateTime
end
class Category
include DataMapper::Resource
has n, :posts, :through => Resource
property :id, Serial
property :title, String
end
DataMapper成功构建了category_posts表。我不认为我的创建表单中的代码是正确的。
<form action="/post/create/" method="post">
<% @category = Category.all %>
<% @category.each_with_index do |cat,i| %>
<input id="category<%=i%>" type="checkbox" value="<%= cat.title %>" name="post.category.<%=cat.id%>" />
<label for="category<%=i%>"><%= cat.title%></label>
<% end %>
<p>
<input type="submit">
</p>
</form>
我尝试在category_posts表中手动创建条目,但不会显示任何记录。以下是我的视图与类别相关的部分。计数用于调试,它总是读为0。
<%= @post.categories.count %>
<% @post.categories.each do |category| %>
<p>Test: <%= category.title %></p>
<% end %>
任何想法我做错了什么?
由于
答案 0 :(得分:1)
documentation for Datamapper(“有,并且属于,很多(或多对多)”部分有一些提示,正如@Mika Tuupola所指出的,看起来你已经设置了你的模型正确,问题可能在于使用你的模型:
post = Post.create
category = Category.create
# link them by adding to the relationship
post.categories << category
post.save
p post.categories # => [#<Category @id=1>]
答案 1 :(得分:0)
我对datamapper的经验有限,但您是否需要在两个ID上定义:key => true
?