8

我正在尝试新的 Rails gem http://activeadmin.info/,它工作得很好!但是我找不到任何关于如何在关联中使用它的文档。例如:

class Membership < ActiveRecord::Base
  belongs_to :course
  belongs_to :person

class Course < ActiveRecord::Base
  has_many :memberships
  has_many :people,  :through => :memberships

class Person < ActiveRecord::Base
  has_many :memberships
  has_many :courses, :through => :memberships

会员加入表还包括一些额外的数据(即:出席)。我正在尝试同时显示课程和学生姓名的成员资格 - 并允许对这些姓名进行过滤/排序。据我发现,Active Admin 不能跨关联工作。有没有其他人成功地做到了这一点,或者找到了另一个成功的宝石?非常感谢!

4

4 回答 4

5

成分.rb

class Ingredient < ActiveRecord::Base
has_and_belongs_to_many :products, :join_table => :ingredients_products
end

产品.rb

class Product < ActiveRecord::Base
  has_and_belongs_to_many :ingredients, :join_table => :ingredients_products
end

不要忘记加入表的迁移(:id 为 false!)

class CreateProductsIngredients < ActiveRecord::Migration
  def self.up
    create_table :ingredients_products,:id => false do |t|
      t.integer :product_id
      t.integer :ingredient_id
      t.timestamps
    end
  end

  def self.down
    drop_table :products_ingredients
  end
end

现在在 ActiveAdmin 资源中定义表单,覆盖默认值

ActiveAdmin.register Product do
  form do |f|
        f.inputs "Details" do
          f.input :product_name
          f.input :brand
          f.input :ingredients # don't forget this one!
        end
end
于 2011-05-20T22:36:29.173 回答
4

我玩 ActiveAdmin 已经有一段时间了,这就是我设法让关联在索引和表单中工作的方法。

我刚刚猜到了你下面的一些模型列。另请注意,在表格中。“人”部分将显示所有要编辑的列,而“课程”部分将只显示指定的列。

ActiveAdmin.register User do
    index do
        column :id
        column :name
        column :attendance
        column :person do |membership|
            membership.person.name
        end
        column :course do |membership|
            membership.course.name
        end
        default_actions
    end

    form do |f|
        f.inputs "Membership" do
            f.input :name
            f.input :created_at
            f.input :updated_at
        end
        f.inputs :name => "Person", :for => :person do |person|
            person.inputs
        end
        f.inputs :name => "Course", :for => :course do |course|
            course.input :name
        end
        f.buttons
    end
end

我没有对此进行测试,但您应该能够将这些想法应用于您的案例。它为我工作。

更新:我刚刚再次阅读了您的问题,并指出您希望能够对关联列进行排序。我刚刚检查了我的实现,这确实不起作用。我的回答可能对你没用,但无论如何我都会把它留在这里(可能会帮助其他人)。

于 2011-06-14T03:03:26.667 回答
1

我自己刚刚开始使用这个 gem,虽然我还没有开始展示关联信息,但这里是创建关联表单的方法:

form do |f|
  f.inputs

  f.has_many :associations do |association|
     association.inputs
  end

  f.buttons
end

这将为您提供带有脚手架的基本形式。

于 2011-05-29T17:19:21.747 回答
0

成分.rb

class Ingredient < ActiveRecord::Base
   has_and_belongs_to_many :products, :join_table => :ingredients_products
end

产品.rb

class Product < ActiveRecord::Base
  attr_accessible ingredient_ids
  has_and_belongs_to_many :ingredients, :join_table => :ingredients_products
end

迁移_xxx.rb

class CreateProductsIngredients < ActiveRecord::Migration
  def self.up
    create_table :ingredients_products,:id => false do |t|
      t.integer :product_id
      t.integer :ingredient_id
      t.timestamps
    end
  end

  def self.down
    drop_table :products_ingredients
  end
end

产品.rb

ActiveAdmin.register Product do
  form do |f|
     f.inputs "Details" do
        f.input :product_name
        f.input :brand
        f.input :ingredients
     end
  end
  ...
end
于 2013-03-17T00:44:03.420 回答