ActiveAdmin настроить представление для has_many: через - PullRequest
0 голосов
/ 31 января 2012

Я работаю над приложением 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 ]

2 голосов
/ 04 декабря 2012

Другим решением было бы просто определить to_s в модели:

def to_s 
  "#{email} | #{firstname} #{lastname}" 
end

Не нужно устанавливать: label_method.

1 голос
/ 14 апреля 2012

Просто добавьте :label_method => lambda:

app_f.input :user, :label_method => lambda{|u| "#{u.email} | #{u.firstname} #{u.lastname}" }
0 голосов
/ 03 февраля 2012

Я исправляю это, добавляя этот метод в 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 
...