ActiveAdmin自定义has_many:through的视图

时间:2012-01-31 11:20:17

标签: ruby-on-rails-3 has-many-through activeadmin

我正在使用此模型开发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
....

我可以用它吗?

3 个答案:

答案 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