![](/img/trans.png)
[英]Use associated values on has_many through relations to filter a table in active admin (Rails 4/Active Admin)
[英]Active Admin has_many with set number of nested relations
我正在使用Active Admin,我在两个模型之间有一对多的关系:
class WeeklyMenu < ActiveRecord::Base
has_many :menu_items
attr_accessible :menu_items
accepts_nested_attributes_for :menu_items
end
在WeeklyMenu的管理页面中,我想显示五个menu_items。 这就是我的管理页面目前的样子:
ActiveAdmin.register WeeklyMenu do
form do |f|
f.inputs "Details" do
f.input :title
f.input :week
end
f.has_many :menu_items do |menu_item|
menu_item.input :title
end
f.buttons
end
end
这给了我一个非常好的界面来添加更多的menu_items,但我希望用户有五个 - 不多也不少。 我该怎么做呢?
更换
f.has_many :menu_items do |menu_item|
menu_item.input :title
end
同
f.inputs "Menu items" do
5.times do
f.object.menu_items.build
end
f.fields_for :menu_items do |m|
m.inputs do
m.input :title
end
end
end
可能不是最好的解决方案,但这应该有效......
@ user946611建议的fields_for
回答对我不起作用,但是下面的代码做了:
f.inputs 'Menu Items' do
(5 - f.object.menu_items.count).times do
f.object.menu_items.build
end
f.has_many :menu_items, new_record: false do |m|
m.input :title
m.input(:_destroy, as: :boolean, required: false, label: 'Remove') if m.object.persisted?
end
end
这将始终显示5个项目形式,无论它们是否创建了多个。 new_record: false
禁用“添加新菜单项”按钮。
如果您想再次编辑表单,@ user946611的答案缺少判断menu_item是否存在的条件,因为在提交和编辑表单时,将生成另外五个menu_items。
所以它应该是:
f.inputs 'Menu Items' do
if !f.object.menu_items.present?
5.times do
f.object.menu_items.build
end
end
f.fields_for :menu_items do |m|
m.inputs do
m.input :title
end
end
end
Activeadmin定义了可用于此类事情的回调: https : //github.com/activeadmin/activeadmin/blob/master/lib/active_admin/resource_dsl.rb#L157-L161
after_build挂钩似乎是初始化has_many关系的合适位置
ActiveAdmin.register WeeklyMenu do
after_build do |weekly_menu|
(5 - weekly_menu.menu_items.size).times do
weekly_menu.menu_items.build
end
end
form do |f|
f.inputs "Details" do
f.input :title
f.input :week
end
f.has_many :menu_items do |menu_item|
menu_item.input :title
end
f.buttons
end
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.