58 validation tagging ruby-on-rails has-many
用户可以将标签添加到代码段:
class Snippet < ActiveRecord::Base
# Relationships
has_many :taggings
has_many :tags, :through => :taggings
belongs_to :closing_reason
end
Run Code Online (Sandbox Code Playgroud)
我想验证标签的数量:至少为1,最多为6.我如何做到这一点?谢谢.
Nik*_*bak 65
您始终可以创建自定义验证.
就像是
validate :validate_tags
def validate_tags
errors.add(:tags, "too much") if tags.size > 5
end
Run Code Online (Sandbox Code Playgroud)
sbo*_*ami 59
@SooDesuNe在此SO帖子上提供了更好的解决方案
validates :tags, length: { minimum: 1, maximum: 6 }
Run Code Online (Sandbox Code Playgroud)
我认为你可以使用验证.reject(&:marked_for_destruction?).length.
这个怎么样?
class User < ActiveRecord::Base
has_many :groups do
def length
reject(&:marked_for_destruction?).length
end
end
accepts_nested_attributes_for :groups, allow_destroy: true
validates :groups, length: { maximum: 5 }
end
Run Code Online (Sandbox Code Playgroud)
或这个.
class User < ActiveRecord::Base
has_many :groups
accepts_nested_attributes_for :groups, allow_destroy: true
GROUPS_MAX_LENGTH = 5
validate legth_of_groups
def length_of_groups
groups_length = 0
if groups.exists?
groups_length = groups.reject(&:marked_for_destruction?).length
end
errors.add(:groups, 'too many') if groups_length > GROUPS_MAX_LENGTH
end
end
Run Code Online (Sandbox Code Playgroud)
然后,你可以命令.
@user.assign_attributes(params[:user])
@user.valid?
Run Code Online (Sandbox Code Playgroud)
谢谢你的阅读.
参考文献:
http://homeonrails.com/2012/10/validating-nested-associations-in-rails/ http://qiita.com/asukiaaa/items/4797ce44c3ba7bd7a51f
| 归档时间: |
|
| 查看次数: |
26338 次 |
| 最近记录: |