简体   繁体   中英

how can I get rails_admin to handle associations properly?

Two questions:

1) How can I make a column in the 'list' for a model consist of data from the record's association? In other words, I have a user model and a user has_many posts. I want to simply have a "post count" column in the list. I tried doing:

field :posts do
  formatted_value do
    value.count
  end
end

but that results in a divide by zero error. I even tried doing:

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

but got the same results.

2) How can I filter the listing to a particular scope? For example, I want to make the users post count be a link that is clickable which will show all posts for the given user.

The best I could figure out how to do this was to do:

# 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

Which doesn't work very well. Is there a way to instruct rails-admin to do a .where(:user_id => xxx) on the model?

The other thing I wasn't crazy about was having to manually put in 'admin/posts'.. I was trying to see if I could do rails_admin_list_path(:model_name => "posts") . but that didn't seem to work.

You'd probably get a better response on the rails_admin mailing list - http://groups.google.com/group/rails_admin/

For your first question, this should do the trick:

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

For your second question, rails_admin now has a filter system - see the "add filter" dropdown at http://demo.railsadmin.org/admin/players . Tapping into that would be a much better method.

rails_admin_list_path(:model_name => "posts") should work, you might have to include Rails.application.routes.url_helpers or similar.

Try adding this to your rails_admin.rb

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

worked for me

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM