已经有一段时间了,因为我已经使用Rails做了任何事情,现在我正在使用rails 4.此外,我正在看看活跃的管理员。寻找一些帮助让我继续前进。
我有两种模式:
class Membership < ActiveRecord::Base
belongs_to :member
attr_accessible :membership_type
end
class Member < ActiveRecord::Base
has_many :memberships
accepts_nested_attributes_for :memberships
attr_accessible :forename, :middlename, :surname, :house_no, :house_name, :street, :town, :postcode, :home_tel, :mobile_tel, :work_tel, :email, :membership_attributes
end
她的想法是,在创建新成员时,您应该能够从下拉列表中选择成员资格类型(有3个选项)
我的主动管理资源目前看起来像这样但我需要合并新的会员类型:
ActiveAdmin.register Member do
# Set Which Columns are to be displayed on the index page
index do
column :forename
column :middlename
column :surname
column :house_no
column :house_name
column :street
column :town
column :postcode
column :home_tel
column :mobile_tel
column :work_tel
column :email
default_actions
end
# Set Which Columns are to be displayed on Create New Member
form do |f|
f.inputs "Member Registration" do
f.input :forename
f.input :middlename
f.input :surname
f.input :house_no
f.input :house_name
f.input :street
f.input :town
f.input :postcode
f.input :home_tel
f.input :mobile_tel
f.input :work_tel
f.input :email
f.input :memberships, :label => 'Membership Type', :as => :select, :collection => Membership.all
end
end
因此我的会员资格选择框出现在表单中,但显示为:
#<Membership:123456>
如何让它显示实际值?
稍微偏离问题主题但是使用rails 4我不再需要使用attr_accessible
我,但是现在我已经包含了gem'en protected_attributes'。关于这一点的任何指示将不胜感激。
答案 0 :(得分:2)
要在列视图中显示成员资格,您可以执行以下操作:
column :memberships do |member|
member.memberships.map { |ms| ms.type }.join(', ')
end
在Rails 4中,您可以将此代码放在Active Admin初始化程序(active_admin.rb)中而不是使用'protected_attributes'gem:
ActiveAdmin::ResourceController.class_eval do
# Allow ActiveAdmin admins to freely mass-assign when using strong_parameters
[(params[resource_request_name] || params[resource_instance_name]).try(:permit!) || {}]
end
end
答案 1 :(得分:2)
要显示实际成员资格类型的值,请使用此
f.input :memberships, :label => 'Membership Type', :member_label => :membership_type
Formtastic documentation有更多例子。
答案 2 :(得分:1)
嘿,看起来每件事情都很好,attr_accessible中有一个小错字:
:membership_attributes -> :memberships_attributes
如果可能的话,把它放在第一位,
attr_accessible :memberships_attributes, :forename, :middlename, :surname, :house_no, :house_name, :street, :town, :postcode, :home_tel, :mobile_tel, :work_tel, :email
要允许嵌套和更新has_many关联,您必须将以下内容添加到它们所属的模型中:
为嵌套属性添加attr_accessible以允许批量分配。
如果belongs_to模型被销毁,则添加明显的has_many关联以及销毁相关has_many关联的选项。
添加accepts_nested_attributes以允许单个请求更新has_many模型和belongs_to模型,并选择在需要时销毁has_many模型。
答案 3 :(得分:1)
如果您使用的是Rails 4并且刚刚开始使用ActiveAdmin,我建议您使用master分支中的版本。 ActiveAdmin&lt; 1.0.0-pre不支持Rails 4,实际上通过permit_params
dsl支持强参数。
要使用该版本,请将以下内容添加到Gemfile
gem 'activeadmin', github: 'gregbell/active_admin'
在Rails 4中,您不再使用attr_accessible
,并且需要在控制器中允许所有参数。有关详细信息,请查看此处的文档:
https://github.com/gregbell/active_admin/blob/master/docs/2-resource-customization.md
ActiveAdmin.register Member do
permit_params :forename, :middlename, :surname, :house_no, :house_name, :street, :town, :postcode, :home_tel, :mobile_tel, :work_tel, :email, membership_ids
end
至于您的会员资格无法正常显示,ActiveAdmin会在智能查询中尝试确定某些内容的显示名称,尝试使用名为name
,title
,display_name
的方法,如果所有其他方法都失败,to_label
,to_s , and, I think,
检查`。只需在您的会员模型中添加方法:
def display_name
membership_type
end
答案 4 :(得分:0)
您可以通过以下方式执行此操作:
f.input :memberships, :label => 'Membership Type', :as => :select,:collection => proc {(Membership.all).map{|m| [t.membership.name,t.id]}}