如何让rails_admin正确处理关联?

时间:2011-06-16 04:30:44

标签: ruby-on-rails rails-admin

两个问题:

1)如何在模型的'list'中创建一个列来自记录关联的数据?换句话说,我有一个用户模型和一个用户has_many帖子。我想在列表中只有一个“帖子计数”列。我试过了:

field :posts do
  formatted_value do
    value.count
  end
end

但是会导致零除错误。我甚至尝试过:

field :posts do
  formatted_value do
    bindings[:object].posts.count
  end
end

但结果相同。

2)如何将列表过滤到特定范围?例如,我想让用户的帖子数是一个可点击的链接,它将显示给定用户的所有帖子。

我能弄明白如何做到这一点的最好方法是:

# note that I created a method post_count to temporarily solve problem #1
field :post_count do
  formatted_value do
    bindings[:view].link_to value, "/admin/posts?query=#{bindings[:object].id}"
  end
end

哪种方法效果不佳。有没有办法指示rails-admin在模型上执行.where(:user_id => xxx)

另一件我并不疯狂的事情是必须手动输入'admin / posts'..我试图看看我是否可以rails_admin_list_path(:model_name => "posts")。但这似乎不起作用。

2 个答案:

答案 0 :(得分:1)

您可能会在rails_admin邮件列表中获得更好的回复 - http://groups.google.com/group/rails_admin/

对于你的第一个问题,这应该可以解决问题:

field :posts, :virtual do
  formatted_value do
    bindings[:object].posts.count
  end
end

对于您的第二个问题,rails_admin现在有一个过滤系统 - 请参阅http://demo.railsadmin.org/admin/players处的“添加过滤器”下拉列表。利用这将是一个更好的方法。

rails_admin_list_path(:model_name => "posts")应该有效,您可能必须include Rails.application.routes.url_helpers或类似。

答案 1 :(得分:0)

尝试将此添加到您的rails_admin.rb

RailsAdmin.config {|c| c.label_methods << :field_name} 

为我工作