开源项目 `assignable_values` 使用教程

开源项目 assignable_values 使用教程

assignable_valuesRestrict the values assignable to ActiveRecord attributes or associations.项目地址:https://gitcode.com/gh_mirrors/as/assignable_values

项目介绍

assignable_values 是一个用于限制 ActiveRecord 模型属性和关联可赋值的 gem。它允许你在运行时生成允许的值列表,并在验证过程中检查这些值。这个 gem 特别适用于需要动态生成枚举值、国际化应用和常见授权模式的场景。

项目快速启动

安装

首先,将 assignable_values 添加到你的 Gemfile 中:

gem 'assignable_values'

然后运行 bundle install

基本用法

假设你有一个 Song 模型,并且你想限制 genre 属性的可赋值范围:

class Song < ActiveRecord::Base
  assignable_values_for :genre do
    ['pop', 'rock', 'electronic']
  end
end

验证

创建一个新的 Song 实例并验证其 genre 属性:

song = Song.new(genre: 'rock')
song.valid? # => true

song = Song.new(genre: 'elephant')
song.valid? # => false

应用案例和最佳实践

动态生成可赋值列表

你可以根据其他属性动态生成可赋值列表。例如,根据歌曲的年份生成 genre 列表:

class Song < ActiveRecord::Base
  validates_numericality_of :year

  assignable_values_for :genre do
    genres = []
    genres << 'jazz' if year > 1900
    genres << 'rock' if year > 1960
    genres
  end
end

从其他源获取可赋值列表

你可以从其他对象获取可赋值列表,这在授权场景中非常有用:

class Story < ActiveRecord::Base
  assignable_values_for :state, through: proc { Power.current }
end

class Power
  cattr_accessor :current

  def initialize(role)
    @role = role
  end

  def assignable_story_states(story)
    states = ['draft', 'pending']
    states << 'accepted' if @role == :admin
    states
  end
end

典型生态项目

assignable_values 可以与以下项目结合使用,以增强其功能:

  1. Rails:作为 ActiveRecord 的扩展,与 Rails 框架完美集成。
  2. I18n:支持国际化,可以在 I18n 字典中定义人类可读的标签。
  3. CanCanCanPundit:用于权限管理,确保只有授权的用户可以设置特定的值。

通过这些集成,assignable_values 可以在多种复杂场景中提供强大的值限制和验证功能。

assignable_valuesRestrict the values assignable to ActiveRecord attributes or associations.项目地址:https://gitcode.com/gh_mirrors/as/assignable_values

  • 20
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牧微言

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值