我正在使用此模型开发ActiveAdmin应用程序:
用户
class User < ActiveRecord::Base
# A User has many roles for interact on a project
has_many :roles, :dependent => :destroy
has_many :projects, :through => :role
end
角色
class Role < ActiveRecord::Base
belongs_to :user
belongs_to :project
end
项目
class Project < ActiveRecord::Base
# A project has many roles for interact
has_many :roles, :dependent => :destroy
has_many :users, :through => :role
accepts_nested_attributes_for :roles
end
要在每个项目中添加具有角色的用户,我会创建此表单:
form do |f|
f.inputs "Details" do # Project's fields
f.input :title
f.input :code
end
f.has_many :roles do |app_f|
app_f.inputs do
if !app_f.object.nil?
app_f.input :_destroy, :as => :boolean, :label => "Destroy?"
end
app_f.input :user
app_f.input :senior_author
end
end
f.buttons
end
我的第一个问题是如何使用user.firstname + user.lastname创建一个。其实我有这样的事情:
#<User:0x007fb98a7d6568>
第二个问题是我的角色模型是一个布尔属性列表:
:senior_author
:first_author
:viewer
....
我可以用它吗?
答案 0 :(得分:2)
另一种解决方案是在模型中定义to_s
:
def to_s
"#{email} | #{firstname} #{lastname}"
end
无需设置:label_method。
答案 1 :(得分:1)
只需添加:label_method => lambda
:
app_f.input :user, :label_method => lambda{|u| "#{u.email} | #{u.firstname} #{u.lastname}" }
答案 2 :(得分:0)
我通过将此方法添加到models / user.rb
来解决此问题# format label for formtastic dropdown menu
def to_label
"#{email} | #{firstname} #{lastname}"
end
我这样使用它:
app_f.input :user, :include_blank => false, :label_method => :to_label