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