Module: FormSelect::Model::ClassMethods
- Defined in:
- lib/form_select/model.rb
Instance Method Summary collapse
-
#form_select(method, field: nil, scope: nil) ⇒ Object
Use for define helper methods for Rails form.select tag.
Instance Method Details
#form_select(method, field: nil, scope: nil) ⇒ Object
Use for define helper methods for Rails form.select tag
for example:
class User < ApplicationRecord
form_select :name, scope: -> { order("name asc") }
form_select :name_value, field: :name, scope: -> { order("name asc") }
form_select :email, field: [:name, :email], scope: -> { where(status: :active).order("id desc") }
form_select :city, field: :city, scope: -> { where("city is not null").select(:city).distinct }
end
<div class="field">
<%= form.label :user_id %>
<%= form.select :user_id, User. %>
</div>
<div class="field">
<%= form.label :email %>
<%= form.select :email, User. %>
</div>
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/form_select/model.rb', line 32 def form_select(method, field: nil, scope: nil) method_name = "#{method}_options" if field.blank? text_method ||= method value_method ||= primary_key else field = [field] unless field.is_a?(Array) text_method = field.first value_method = field.last end scope ||= -> { all } define_singleton_method(method_name) do scope.call.collect { |record| [record.send(text_method), record.send(value_method)] } end end |