我们有一个包含唯一类别的类别表。我们的帖子应该链接到这些类别中的任何一个。我尝试通过以下方式添加用于选择类别的复选框:
- 在名为“post[categoriesss][]”的字段中添加包含类别的复选框,其中包含类别的值
:id
。 - 更新
new
andupdate
方法以获取这些 id 并收集与之关联的类别,然后按照文档<<
中的说明通过运算符将每个类别添加到类别属性中。
我们将代码添加到new
并update
确保不必在多个控制器中执行此操作。
但是,我们收到以下错误:
类别上未定义的属性或关系“<<”
我们在这里做错了什么?有没有其他方法可以实现我们的目标?我们的代码如下。
class Post
include DataMapper::Resource
property :id, Serial
has n, :categories, :through => Resource
def self.new(hash={})
if hash.key? :categoriesss
hash[:categoriesss].each do |category|
categories << Category.get(category)
end
hash.delete! :categoriesss
end
super hash
end
end
class Category
include DataMapper::Resource
property :id, Serial
property :name, String, :required => true
has n, :rekenservices, :through => Resource
end
<% Category.all.each do |category| %>
<label>
<input type="checkbox" name="post[categoriesss][]" value="<%= category.id %>" />
<%= category.name %>
</label>
<% end %>
更新:我现在将复选框的名称改回并将and方法categories
更新为:new
update
def self.new(hash={})
if hash.key? :categories
hash[:categories].map! {|id| Category.get id}
end
super hash
end
def update(hash={})
if hash.key? :categories
hash[:categories].map! {|id| Category.get id}
end
super hash
end
第一次添加类别有效。更新时检查一个额外的类别也很有效。但是,取消选中类别会产生错误消息:
列 category_id、post_id 不是唯一的