首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用条件验证属性是否存在

使用条件验证属性是否存在
EN

Stack Overflow用户
提问于 2019-06-10 23:32:11
回答 1查看 75关注 0票数 0

我正在尝试在我的应用程序中引入一个功能,其中用户可以向organizers.To建议一个事件,建议一个用户必须填写表单的事件。我想验证一些字段(事件的属性)的存在与条件为真,即字段不应留空,如果用户(表单的提交者)不是admin.However如果表单的提交者是管理员,字段可以留空。

代码语言:javascript
代码运行次数:0
运行
复制
validates :attribute_name, presence: { :if => :user.is_admin? }

未定义的方法`is_admin?‘for :user:Symbol您的意思是?is_haml?

我也尝试过:user.is_admin()==True,它也抛出了错误:未定义的方法`is_admin‘for :user:Symbol你的意思是什么?is_a?

我在users表中有以下属性:

代码语言:javascript
代码运行次数:0
运行
复制
t.boolean  "is_admin",               default: false

我在我的事件模型中定义了以下关联:

代码语言:javascript
代码运行次数:0
运行
复制
has_many :event_users, dependent: :destroy
  has_many :users, through: :event_users


  has_one :submitter_event_user, -> { where(event_role: 'submitter') }, class_name: 'EventUser'
  has_one  :submitter, through: :submitter_event_user, source: :user

在控制器中我有这样的代码:

代码语言:javascript
代码运行次数:0
运行
复制
@event.submitter = current_user
EN

回答 1

Stack Overflow用户

发布于 2019-06-10 23:59:12

问题是您正在尝试调用Symbol :user上的is_admin?,正如错误所暗示的那样。

如果我没理解错的话,这个属性应该存在,unless user.is_admin?返回true

这可以通过多种方式完成:

代码语言:javascript
代码运行次数:0
运行
复制
validates :attribute_name, presence: true, unless: -> {|u| u.is_admin?} 
#Or 
validates :attribute_name, presence: true, unless: :is_admin?
# or using presence directly as you tried to originally 
validates :attribute_name, presence: {unless: -> {|u| u.is_admin?} } 
# or 
validates :attribute_name, presence: {unless: :is_admin? } 

我通常更喜欢第一个选项,因为,IMO,它是最不含糊的,也是最具可读性的,但它们都应该产生相同的函数,所以只要保持一致,就选择你喜欢的。

在块形式中,实例被让给块,块的返回值用于确定是否应该运行验证。

使用符号时,符号通过send消息传输(例如self.send(:is_admin? )发送到实例,返回值再次用于确定是否应应用验证

ActiveModel::Validations::ClassMethods#validates

根据修订后的问题更新:

由于Event通过submitterUser相关,并且已经设置为User的实例,因此可以使用非常类似的方式进行验证

代码语言:javascript
代码运行次数:0
运行
复制
validates :attribute_name, presence: true, 
    unless: ->(event) { event.submitter&.is_admin?} 

或者创建一个单独的方法,比如

代码语言:javascript
代码运行次数:0
运行
复制
def admin_submitter? 
  self.submitter&.is_admin? 
end
validates :attribute_name, presence: {unless: :admin_submitter?} 
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56529363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档