Module: FormSelect::Model::ClassMethods

Defined in:
lib/form_select/model.rb

Instance Method Summary collapse

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") }
end

<div class="field">
  <%= form.label :user_id %>
  <%= form.select :user_id, User.name_options %>
</div>
<div class="field">
  <%= form.label :email %>
  <%= form.select :email, User.email_options %>
</div>


30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/form_select/model.rb', line 30

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