0

我能够按照以下方式管理 habtm,我想要一个更好的方法

我在 Rails 3 上的用户和标签之间有 habtm,aa 0.5.1 标签名称是 uniq

  f.input :tags, :label => 'Assign existing tag'                             
  # this above allows to select from existing tags, but cannot allow to create one

  f.has_many :tags, :label => 'Add new tags, modify existings' do |ff|
    ff.input :name
    ff.input :_destroy, :as => :boolean
  end
  # this above allows to create new one but not allow to specify existing one
  # if we specify existing one, uniqueness wont let create this one, neither existing get used
  # and throws validation error

任何提示?

添加我的模型

class User < ActiveRecord::Base
  has_and_belongs_to_many :tags
  scope :tagged_with, lambda {|tags| joins(:tags).where("tags.name" => tags)}
  accepts_nested_attributes_for :tags, :allow_destroy => true
end

class Tag < ActiveRecord::Base
  has_and_belongs_to_many :users
  validates :name, :uniqueness => { :case_sensitive => false }
end
4

1 回答 1

0

尝试这个,

f.label => 'Assign existing tag'
f.select :tags, Tag.all.map{|t| [t.tag_name, t.id]}, {:prompt => "Select Tag name" }

以上允许从现有标签中进行选择,没有创建标签的选项

对于第二件事,在模型中添加这一行,

validates :tags, :uniqueness => {:scope => :tag_name}

这里 :tag_name 是你的字段名。如果在创建副本时标签名称已经存在,则会引发错误。

根据您的问题,这只是一个想法。这不是您的确切答案,因为您的规范不足以给您确切的答案。

于 2013-03-25T11:38:43.140 回答