How many times have you written a quickie drop-down box to choose one instance of an associated model? Here's a quickie monkey-patch that will help. Put the following in environment.rb (or similar):
class ActiveRecord::Base
# convenience method for selection boxes of this model
# Assumes existance of a function "display_name" that will be a
# displayable name for the select box.
def self.options_for_select
self.find(:all).map {|p| [p.display_name, p.id] }
end
end
Make sure you have a function in your model named "display_name" that returns what you'd like to see in your drop-down, eg:
class Person < ActiveRecord::Base
has_many :posts
# convenience method for the person's name
def display_name
[first_name, last_name].compact.join(', ')
end
end
class Post < ActiveRecord::Base
belongs_to :person
alias :display_name :title
end
Then use in a view (eg as follows):
<% form_for(@person) do |f| %> <p>Pick a post: <%= f.select :post_id, Post.options_for_select -%><%= f.submit 'Go!' -%></p> <% end %>
1 comment:
I've wrapped that pattern in a very similar way as a simple plugin:
http://github.com/insignia/to_select
Post a Comment