Skip to content

Instantly share code, notes, and snippets.

@ryuta-ito
Last active April 20, 2020 13:54
Show Gist options
  • Save ryuta-ito/d8a6db4a46a249d1aef1b04b5a1c20a7 to your computer and use it in GitHub Desktop.
Save ryuta-ito/d8a6db4a46a249d1aef1b04b5a1c20a7 to your computer and use it in GitHub Desktop.
class Hoge < ApplicationRecord
  before_save :arrange_bed_number

  def self.bed_numbers
    {
      bed_number_1: 1,
      bed_number_2: 2,
      bed_number_3: 4,
    }
  end
  attr_accessor *bed_numbers.keys

  bed_numbers.each do |key, value|
    define_method "#{key}?" do
      value & bed_number.to_i != 0
    end
  end

  private
    def arrange_bed_number
      self.bed_number = self.class.bed_numbers.keys.sum {|key| send(key).to_i}
    end
end
<%= simple_form_for(@hoge) do |f| %>
  <%= f.error_notification %>
  <%= f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present? %>

  <div class="form-inputs">
    <%= f.input :bed_number %>
    <%= f.input :bed_number_1, as: :boolean, checked_value: @hoge.class.bed_numbers[:bed_number_1], unchecked_value: 0, input_html: { checked: @hoge.bed_number_1? } %>
    <%= f.input :bed_number_2, as: :boolean, checked_value: @hoge.class.bed_numbers[:bed_number_2], unchecked_value: 0, input_html: { checked: @hoge.bed_number_2? } %>
    <%= f.input :bed_number_3, as: :boolean, checked_value: @hoge.class.bed_numbers[:bed_number_3], unchecked_value: 0, input_html: { checked: @hoge.bed_number_3? } %>
  </div>

  <div class="form-actions">
    <%= f.button :submit %>
  </div>
<% end %>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment