2

我们有一个包含唯一类别的类别表。我们的帖子应该链接到这些类别中的任何一个。我尝试通过以下方式添加用于选择类别的复选框:

  1. 在名为“post[categoriesss][]”的字段中添加包含类别的复选框,其中包含类别的值:id
  2. 更新newandupdate方法以获取这些 id 并收集与之关联的类别,然后按照文档<<中的说明通过运算符将每个类别添加到类别属性中。

我们将代码添加到newupdate确保不必在多个控制器中执行此操作。

但是,我们收到以下错误:

类别上未定义的属性或关系“<<”

我们在这里做错了什么?有没有其他方法可以实现我们的目标?我们的代码如下。

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更新为:newupdate

  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 不是唯一的

4

0 回答 0