加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails-3 – 覆盖active_admin form.has_many中的默认范

发布时间:2020-12-17 03:39:17 所属栏目:百科 来源:网络整理
导读:给定一个带有__附件的模型Post,附件有一个隐藏的标志.在整个应用程序中,我想轻松地说post.attachments并且只获得可见的,所以我在Attachment模型中设置了一个默认范围(使用squeel): default_scope - { where { (hidden != true) | (hidden == nil) } } 但是
给定一个带有__附件的模型Post,附件有一个隐藏的标志.在整个应用程序中,我想轻松地说post.attachments并且只获得可见的,所以我在Attachment模型中设置了一个默认范围(使用squeel):

default_scope -> { where { (hidden != true) | (hidden == nil) } }

但是管理页面需要能够查看帖子的所有附件,而不仅仅是可见的附件(因此您可以切换隐藏的复选框).执行此操作的默认方式(在admin / posts.rb中)使用default_scope,只允许我编辑可见的:

f.has_many :attachments do |a|
  ...
end

我知道我可以不使用default_scope而是命名它:可见,然后到处(管理页面除外)说post.attachments.visible但我不喜欢这样做.

如何取消管理页面上的子附件?

解决方法

这是我制定的解决方案:

在app / admin / posts.rb中

f.has_many :attachments,for: [:attachments,f.object.attachments_including_hidden] do |a|
  ...
end

在app / models / posts.rb中

def attachments_including_hidden
  Attachment.unscoped.where( attachable_id: id )
end

(其中附件模型belongs_to :: attachable,polymorphic:true)

这是怎么回事? ActiveAdmin使用Formtastic,它使用Rails表单生成器.form.has_many方法是一个ActiveAdmin方法,它调用Formtastic的form.inputs,后者又调用Rails的fields_for. :for选项将一直传递到fields_for,它可以采用一个集合(作为它的第二个arg),所以我明确地将它提供给它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读