<repo_name>aigis1/gridbf<file_sep>/app/models/main_summon.rb
class MainSummon < ActiveHash::Base
  self.data = [
    { id: 1,  name: '神石' },
    { id: 2,  name: 'マグナ' },
    { id: 3,  name: '属性石' }
    ]


  include ActiveHash::Associations
  has_many :fagrids
end
<file_sep>/app/controllers/fagrids_controller.rb
class FagridsController < ApplicationController

  def index
    @fagrids = Fagrid.order(id: "DESC")
  end

  def new
    @fullauto_member = FagridMember.new
  end

  def create
    @fullauto_member = FullautoMember.new(fagrid_params)
    if @fullauto_member.valid?
      @fullauto_member.save
      redirect_to root_path
    else
      render :new
    end
  end

  def show
    @fagrid = Fagrid.find(params[:id])
    @fagrids = Fagrid.all

  end

  def search
    search_grid
    @fagrids = Fagrid.order(id: "DESC")
  end

  def sort
    search_grid
    @result = @g.result    # 検索条件にマッチした商品の情報を取得
  end

  # メンバー検索用
  def msearch 
    members = Member.where(['member LIKE ?', "%#{params[:keyword]}%"]).pluck(:member)
    render json: members
  end

  private
  
  def fagrid_params
    params.require(:fagrid_member).permit(:image, :quest_id, :attr_id, :job_id, :ex_ability_id, :ex_ability2_id, :limit_ability_id, :limit_ability2_id,
      :member, :member2, :member3, :member4, :member5, :main_summon_id, :seraphic_id, :atk_arculm_id, :hp_arculm_id, :difficulty_id, :time_about_id, :remark)
  end
  
  def search_grid
    @g = Fagrid.ransack(params[:q]) # 検索オブジェクトを生成
  end

end
<file_sep>/app/models/job.rb
class Job < ActiveHash::Base
  self.data = [
    { id: 1,  name: 'アプサラス' },
    { id: 2,  name: 'ウォーロック' },
    { id: 3,  name: 'エリュシオン' },
    { id: 4,  name: '義賊' },
    { id: 5,  name: 'カオスルーダー' },
    { id: 6,  name: 'キャバルリー' },
    { id: 7,  name: 'クリュサオル' },
    { id: 8,  name: 'スパルタ' },
    { id: 9, name: 'セージ' },
    { id: 10, name: 'ハウンドドッグ' },
    { id: 11, name: 'ベルセルク' },
    { id: 12, name: 'モンク' },
    { id: 13, name: 'ランバージャック' },
    { id: 14, name: 'レスラー' },
    { id: 15, name: 'ロビンフッド' },
    { id: 16, name: '-' },
    { id: 17, name: '剣豪' },
    { id: 18, name: '黒猫道士' },
    { id: 19, name: 'ザ・グローリー' },
    { id: 20, name: 'ソルジャー' },
    { id: 21, name: 'ドクター' },
    { id: 22, name: '魔法戦士' },
    { id: 23, name: 'ライジングフォース' }
    ]

  include ActiveHash::Associations
  has_many :fagrids
end<file_sep>/app/javascript/packs/grid/application.js
require('grid/ability.js')
require('grid/preview.js')
require('grid/member.js')
require('grid/subAbility.js')<file_sep>/app/models/fagrid_member.rb
class FagridMember < ApplicationRecord
  belongs_to :fagrid
  belongs_to :member
end
<file_sep>/app/forms/fullauto_member.rb
class FullautoMember
  include ActiveModel::Model
  attr_accessor :image, :quest_id, :attr_id, :job_id, :ex_ability_id, :ex_ability2_id, :limit_ability_id, :limit_ability2_id, :main_summon_id,
                :seraphic_id, :atk_arculm_id, :hp_arculm_id, :difficulty_id, :time_about_id, :remark, :member, :member2, :member3, :member4, :member5

  with_options presence:true do
    validates :image
  end

  with_options numericality: { other_than: 0, message: 'Select' } do
    validates :quest_id
    validates :attr_id
    validates :job_id
    validates :ex_ability_id
    validates :limit_ability_id
    validates :main_summon_id
    validates :seraphic_id
    validates :atk_arculm_id
    validates :hp_arculm_id
    validates :difficulty_id
    validates :time_about_id
  end

  def save
    fagrid = Fagrid.create(quest_id: quest_id, attr_id: attr_id, job_id: job_id, ex_ability_id: ex_ability_id, ex_ability2_id: ex_ability2_id,limit_ability_id: limit_ability_id,limit_ability2_id: limit_ability2_id, main_summon_id: main_summon_id,
      seraphic_id: seraphic_id, atk_arculm_id: atk_arculm_id, hp_arculm_id: hp_arculm_id, difficulty_id: difficulty_id, time_about_id: time_about_id, remark: remark, image: image)
    membername1 = Member.where(member: member).first_or_create if member
    membername2 = Member.where(member: member2).first_or_create if member2
    membername3 = Member.where(member: member3).first_or_create if member3
    membername4 = Member.where(member: member4).first_or_create if member4
    membername5 = Member.where(member: member5).first_or_create if member5
    FagridMember.create(fagrid_id: fagrid.id, member_id: membername1.id) if membername1
    FagridMember.create(fagrid_id: fagrid.id, member_id: membername2.id) if membername2
    FagridMember.create(fagrid_id: fagrid.id, member_id: membername3.id) if membername3
    FagridMember.create(fagrid_id: fagrid.id, member_id: membername4.id) if membername4
    FagridMember.create(fagrid_id: fagrid.id, member_id: membername5.id) if membername5
    end
  end<file_sep>/app/models/hp_arculm.rb
class HpArculm  < ActiveHash::Base
  self.data = [
    { id: 1,  name: '4凸〜' },
    { id: 2,  name: 'SSR' },
    { id: 3,  name: 'SR' },
    { id: 4,  name: '無し'}
    ]

  include ActiveHash::Associations
  has_many :fagrids
end<file_sep>/db/migrate/20201201085553_create_fagrids.rb
class CreateFagrids < ActiveRecord::Migration[6.0]
  def change
    create_table :fagrids do |t|
      t.integer    :quest_id,              null: false
      t.integer    :attr_id,               null: false
      t.integer    :job_id,                null: false
      t.integer    :ex_ability_id,         null: false
      t.integer    :ex_ability2_id
      t.integer    :limit_ability_id,      null: false
      t.integer    :limit_ability2_id
      t.integer    :main_summon_id,        null: false
      t.integer    :seraphic_id,           null: false
      t.integer    :atk_arculm_id,         null: false
      t.integer    :hp_arculm_id,          null: false
      t.integer    :difficulty_id,         null: false
      t.integer    :time_about_id,         null: false
      t.text       :remark
      t.timestamps
    end
  end
end
<file_sep>/app/javascript/grid/subAbility.js
if (document.URL.match( /new/ )) {
  window.addEventListener('DOMContentLoaded', function(){
    const $exAbility = document.getElementById('ex-ability')
    const $exAbility2 = document.getElementById('ex-ability2')
    const $limitAbility = document.getElementById('limit-ability')
    const $limitAbility2 = document.getElementById('limit-ability2')

    $exAbility.addEventListener('change', function(){
      if ($exAbility.value.length > 0) {
        if ($limitAbility2.value.length == 0){
        $exAbility2.removeAttribute('style')
        };
      } else {
        $exAbility2.setAttribute("style", "display: none;")
        $exAbility2.value = ""
      }
    });
    $limitAbility.addEventListener('change', function(){
      if ($limitAbility.value.length > 0) {
        if ($limitAbility2.value.length == 0){
          $limitAbility2.removeAttribute('style')
        };
      } else {
        $limitAbility2.setAttribute("style", "display: none;")
        $limitAbility2.value = ""
      }
    });
    $exAbility2.addEventListener('change', function(){
      if ($exAbility2.value.length > 0) {
        $limitAbility2.setAttribute("style", "display: none;")
        $limitAbility2.value = ""
      }
      });
      $limitAbility2.addEventListener('change', function(){
        if ($limitAbility2.value.length > 0) {
          $exAbility2.setAttribute("style", "display: none;")
          $exAbility2.value = ""
        }
      });
  });
};<file_sep>/app/models/ex_ability.rb
class ExAbility < ActiveHash::Base
  self.data = [
    { id: 1,  name: 'ミゼラブルミスト' },
    { id: 2,  name: 'アーマーブレイク' },
    { id: 3,  name: 'グラビティ' },
    { id: 4,  name: 'ブラインド' },
    { id: 5,  name: 'ディスペル' },
    { id: 6,  name: 'アローレイン' },
    { id: 7,  name: 'ソウルピルファー' },
    { id: 8,  name: 'チャームボイス' },
    { id: 9, name: 'デュアルインパルス' },
    { id: 10, name: 'トレジャーハント' },
    { id: 11, name: 'レイジ' },
    { id: 12, name: 'オーラ' },
    { id: 13, name: 'リヴァイブ' },
    { id: 14, name: 'その他強化アビリティ' },
    { id: 15, name: 'その他弱体アビリティ' },
    { id: 16, name: 'その他ダメージアビリティ' },
    { id: 17, name: 'その他回復アビリティ' }
    ]

  include ActiveHash::Associations
  has_many :fagrids
end<file_sep>/app/models/limit_ability.rb
class LimitAbility < ActiveHash::Base
  self.data = [
    { id: 1,  name: 'その他, もしくは無し' },
    { id: 2,  name: '霹靂閃電' },
    { id: 3,  name: '曼珠沙華' },
    { id: 4,  name: '水鳥の歌詠' },
    { id: 5,  name: 'ランドグリース' },
    { id: 6,  name: 'チョーク' },
    { id: 7,  name: 'チェイサー' },
    { id: 8,  name: 'ブラックヘイズ' },
    { id: 9,  name: 'レプリケーションキャスト' },
    { id: 10, name: 'オラトリオ' },
    { id: 11, name: 'コール・オブ・アビス' },
    { id: 12, name: 'ソング・トゥ・ザ・デッド' },
    { id: 13, name: 'ひつじのうた' },
    { id: 14, name: '解放の歌声' },
    { id: 15, name: '桜門五三桐' },
    { id: 16, name: 'トレジャーハントIV' },
    { id: 17, name: 'フォーススナッチ' },
    { id: 18, name: 'ブレイクキープ' },
    { id: 19, name: 'ホワイトスモーク' },
    { id: 20, name: 'アンプレディクト' },
    { id: 21, name: 'アブソーブ' },
    { id: 22, name: 'クイックダウン' },
    { id: 23, name: 'ブラッドソード' },
    { id: 24, name: 'カオス' },
    { id: 25, name: 'ドラグラクト' },
    { id: 26, name: 'ハイ・コマンド' },
    { id: 27, name: 'バタリング・ラム' },
    { id: 28, name: 'アーセガル' },
    { id: 29, name: 'クロスガード' },
    { id: 30, name: 'チェイスブレード' },
    { id: 31, name: 'デュアルアーツ' },
    { id: 32, name: 'ディプティク' },
    { id: 33, name: 'シールドワイア' },
    { id: 34, name: 'ガーディアン' },
    { id: 35, name: 'テストゥド' },
    { id: 36, name: 'リフレクション' },
    { id: 37, name: 'シャイニングII' },
    { id: 38, name: 'ディスペル・シージ' },
    { id: 39, name: 'ベール' },
    { id: 40, name: 'ホワイトウォール' },
    { id: 41, name: 'ジャミング' },
    { id: 42, name: 'スタディエイム' },
    { id: 43, name: 'タイム・オン・ターゲット' },
    { id: 44, name: 'タクティクスコマンド' },
    { id: 45, name: 'トワイライト・ゾーン' },
    { id: 46, name: 'レイショナルショット' },
    { id: 47, name: 'アーマーブレイクII' },
    { id: 48, name: 'ウールヴヘジン' },
    { id: 49, name: 'ブレイブソウル' },
    { id: 50, name: 'ランページII' },
    { id: 51, name: 'レイジIV' },
    { id: 52, name: '岩崩拳' },
    { id: 53, name: '剛耐の型' },
    { id: 54, name: '武操術' },
    { id: 55, name: '落葉焚き' },
    { id: 56, name: '大伐断' },
    { id: 57, name: '安らぎの木漏れ日' },
    { id: 58, name: '一字構え' },
    { id: 59, name: 'ツープラトン' },
    { id: 60, name: 'ファイティングスピリット' },
    { id: 61, name: 'マイクパフォーマンス' },
    { id: 62, name: 'アクロバットヴォレイ' },
    { id: 63, name: 'エメラルドフォグ' },
    { id: 64, name: 'フォックス・リターンズ' },
    { id: 65, name: '雲散霧消' },
    { id: 66, name: '大鷲返し' },
    { id: 67, name: '無明斬' },
    { id: 68, name: '烈刀一閃' },
    { id: 69, name: 'スペシャルボム' },
    { id: 70, name: 'テネブラエ' },
    { id: 71, name: 'ムーンライト' },
    { id: 72, name: 'コルミロス' },
    { id: 73, name: 'ドゥプレクス' },
    { id: 74, name: 'エスパーダ' },
    { id: 75, name: 'ゲリーリャ' },
    { id: 76, name: 'フォーティチュード' },
    { id: 77, name: 'ブリッツバースト' },
    { id: 78, name: 'フルファイア' },
    { id: 79, name: 'アドレナリンラッシュ' },
    { id: 80, name: '鬼神の丸薬' },
    { id: 81, name: 'ニュートリエント' },
    { id: 82, name: 'マッドバイタリティ' },
    { id: 83, name: 'スペルブースト' },
    { id: 84, name: 'ドラゴンブレイク' },
    { id: 85, name: '焙烙玉' },
    { id: 86, name: 'マナバースト' },
    { id: 87, name: 'アンリーシュザフューリー' },
    { id: 88, name: 'ジェット・トゥ・ジェット' },
    { id: 89, name: 'モッシュピット' },
    { id: 90, name: '律動共振' }
    ]

  include ActiveHash::Associations
  has_many :fagrids
end<file_sep>/config/routes.rb
Rails.application.routes.draw do

  root to: 'fagrids#index'
  get 'fagrids/search'
  get 'fagrids/sort'
  resources :fagrids, only: [:index, :new, :create, :show] do
    collection do
      get 'msearch'
    end
  end
end
<file_sep>/app/models/difficulty.rb
class Difficulty < ActiveHash::Base
  self.data = [
    { id: 1,  name: '5凸' },
    { id: 2,  name: '4凸' },
    { id: 3,  name: 'ドラポン' },
    { id: 4,  name: '無し' }
    ]

  include ActiveHash::Associations
  has_many :fagrids
end
<file_sep>/app/models/member.rb
class Member < ApplicationRecord
  has_many :fagrid_member
  has_many :fagrids, through: :fagrid_member
end
<file_sep>/app/models/fagrid.rb
class Fagrid < ApplicationRecord
  has_one_attached :image
  has_many :fagrid_member
  has_many :members, through: :fagrid_member

  extend ActiveHash::Associations::ActiveRecordExtensions
  belongs_to :quest
  belongs_to :attr
  belongs_to :job
  belongs_to :ex_ability
  belongs_to :limit_ability
  belongs_to :main_summon
  belongs_to :seraphic
  belongs_to :atk_arculm
  belongs_to :hp_arculm
  belongs_to :difficulty
  belongs_to :time_about
end
<file_sep>/app/models/seraphic.rb
class Seraphic < ActiveHash::Base
  self.data = [
    { id: 1,  name: '3凸' },
    { id: 2,  name: '無凸' },
    { id: 3,  name: '無し' }
    ]

  include ActiveHash::Associations
  has_many :fagrids
end
<file_sep>/app/models/attr.rb
class Attr < ActiveHash::Base
  self.data = [
    { id: 1, name: '火' },
    { id: 2, name: '水' },
    { id: 3, name: '土' },
    { id: 4, name: '風' },
    { id: 5, name: '光' },
    { id: 6, name: '闇' }
    ]

  include ActiveHash::Associations
  has_many :fagrids
end
<file_sep>/app/javascript/grid/ability.js
if (document.URL.match( /new/ )) {
  window.addEventListener('DOMContentLoaded', function(){
    document.getElementById('job').addEventListener('change', function(){
      $('#limit-ability').html(abilityBlank)
      $('#limit-ability2').html(abilityBlank)

      var $jobId = document.getElementById('job').value

      if ($jobId == 1) {
        $('#limit-ability').append(job1Ability);
        $('#limit-ability2').append(job1Ability);
      } else if ($jobId == 2) {
        $('#limit-ability').append(job2Ability);
        $('#limit-ability2').append(job2Ability);
      } else if ($jobId == 3) {
        $('#limit-ability').append(job3Ability);
        $('#limit-ability2').append(job3Ability);
      } else if ($jobId == 4) {
        $('#limit-ability').append(job4Ability);
        $('#limit-ability2').append(job4Ability);
      } else if ($jobId == 5) {
        $('#limit-ability').append(job5Ability);
        $('#limit-ability2').append(job5Ability);
      } else if ($jobId == 6) {
        $('#limit-ability').append(job6Ability);
        $('#limit-ability2').append(job6Ability);
      } else if ($jobId == 7) {
        $('#limit-ability').append(job7Ability);
        $('#limit-ability2').append(job7Ability);
      } else if ($jobId == 8) {
        $('#limit-ability').append(job8Ability);
        $('#limit-ability2').append(job8Ability);
      } else if ($jobId == 9) {
        $('#limit-ability').append(job9Ability);
        $('#limit-ability2').append(job9Ability);
      } else if ($jobId == 10) {
        $('#limit-ability').append(job10Ability);
        $('#limit-ability2').append(job10Ability);
      } else if ($jobId == 11) {
        $('#limit-ability').append(job11Ability);
        $('#limit-ability2').append(job11Ability);
      } else if ($jobId == 12) {
        $('#limit-ability').append(job12Ability);
        $('#limit-ability2').append(job12Ability);
      } else if ($jobId == 13) {
        $('#limit-ability').append(job13Ability);
        $('#limit-ability2').append(job13Ability);
      } else if ($jobId == 14) {
        $('#limit-ability').append(job14Ability);
        $('#limit-ability2').append(job14Ability);
      } else if ($jobId == 15) {
        $('#limit-ability').append(job15Ability);
        $('#limit-ability2').append(job15Ability);
      } else if ($jobId == 17) {
        $('#limit-ability').append(job17Ability);
        $('#limit-ability2').append(job17Ability);
      } else if ($jobId == 18) {
        $('#limit-ability').append(job18Ability);
        $('#limit-ability2').append(job18Ability);
      } else if ($jobId == 19) {
        $('#limit-ability').append(job19Ability);
        $('#limit-ability2').append(job19Ability);
      } else if ($jobId == 20) {
        $('#limit-ability').append(job20Ability);
        $('#limit-ability2').append(job20Ability);
      } else if ($jobId == 21) {
        $('#limit-ability').append(job21Ability);
        $('#limit-ability2').append(job21Ability);
      } else if ($jobId == 22) {
        $('#limit-ability').append(job22Ability);
        $('#limit-ability2').append(job22Ability);
      } else if ($jobId == 23) {
        $('#limit-ability').append(job23Ability);
        $('#limit-ability2').append(job23Ability);
      };
      $('#limit-ability').append(otherAbility)
      $('#limit-ability2').append(otherAbility)

    });

    const abilityBlank = `<option value="">---</option>`
    const otherAbility = `<option value="1">その他, もしくは無し</option>`
    const job1Ability = '<option value="2">霹靂閃電</option> <option value="3">曼珠沙華</option> <option value="4">水鳥の歌詠</option> <option value="5">ランドグリース</option>'
    const job2Ability = '<option value="6">チョーク</option> <option value="7">チェイサー</option> <option value="8">ブラックヘイズ</option> <option value="9">レプリケーションキャスト</option>'
    const job3Ability = '<option value="10">オラトリオ</option> <option value="11">コール・オブ・アビス</option> <option value="12">ソング・トゥ・ザ・デッド</option> <option value="13">ひつじのうた</option> <option value="14">解放の歌声</option>'
    const job4Ability = '<option value="15">桜門五三桐</option>  <option value="16">トレジャーハントIV</option> <option value="17">フォーススナッチ</option> <option value="18">ブレイクキープ</option> <option value="19">ホワイトスモーク</option>'
    const job5Ability = '<option value="20">アンプレディクト</option> <option value="21">アブソーブ</option> <option value="22">クイックダウン</option> <option value="23">ブラッドソード</option> <option value="24">カオス</option>'
    const job6Ability = '<option value="25">ドラグラクト</option> <option value="26">ハイ・コマンド</option> <option value="27">バタリング・ラム</option>'
    const job7Ability = '<option value="28">アーセガル</option> <option value="29">クロスガード</option> <option value="30">チェイスブレード</option> <option value="31">デュアルアーツ</option> <option value="32">ディプティク</option>'
    const job8Ability = '<option value="33">シールドワイア</option> <option value="34">ガーディアン</option> <option value="35">テストゥド</option> <option value="36">リフレクション</option>'
    const job9Ability = '<option value="37">シャイニングII</option> <option value="38">ディスペル・シージ</option> <option value="39">ベール</option> <option value="40">ホワイトウォール</option>'
    const job10Ability = '<option value="41">ジャミング</option> <option value="42">スタディエイム</option> <option value="43">タイム・オン・ターゲット</option> <option value="44">タクティクスコマンド</option> <option value="45">トワイライト・ゾーン</option> <option value="46">レイショナルショット</option>'
    const job11Ability = '<option value="47">アーマーブレイクII</option> <option value="48">ウールヴヘジン</option> <option value="49">ブレイブソウル</option> <option value="50">ランページII</option> <option value="51">レイジIV</option>'
    const job12Ability = '<option value="52">岩崩拳</option> <option value="53">剛耐の型</option> <option value="54">武操術</option>' 
    const job13Ability = '<option value="55">落葉焚き</option> <option value="56">大伐断</option> <option value="57">安らぎの木漏れ日</option>'
    const job14Ability = '<option value="58">一字構え</option> <option value="59">ツープラトン</option> <option value="60">ファイティングスピリット</option> <option value="61">マイクパフォーマンス</option>'
    const job15Ability = '<option value="62">アクロバットヴォレイ</option> <option value="63">エメラルドフォグ</option> <option value="64">フォックス・リターンズ</option>'
    const job17Ability = '<option value="65">雲散霧消</option> <option value="66">大鷲返し</option> <option value="67">無明斬</option> <option value="68">烈刀一閃</option>'
    const job18Ability = '<option value="69">スペシャルボム</option> <option value="70">テネブラエ</option> <option value="71">ムーンライト</option>'
    const job19Ability = '<option value="72">コルミロス</option> <option value="73">ドゥプレクス</option> <option value="74">エスパーダ</option>'
    const job20Ability = '<option value="75">ゲリーリャ</option> <option value="76">フォーティチュード</option> <option value="77">ブリッツバースト</option> <option value="78">フルファイア</option>'
    const job21Ability = '<option value="79">アドレナリンラッシュ</option> <option value="80">鬼神の丸薬</option> <option value="81">ニュートリエント</option> <option value="82">マッドバイタリティ</option>'
    const job22Ability = '<option value="83">スペルブースト</option> <option value="84">ドラゴンブレイク</option> <option value="85">焙烙玉</option> <option value="86">マナバースト</option>'
    const job23Ability = '<option value="87">アンリーシュザフューリー</option> <option value="88">ジェット・トゥ・ジェット</option> <option value="89">モッシュピット</option> <option value="90">律動共振</option>'
  });
};<file_sep>/README.md
# グリッドブルーファンタジー

## グランブルーファンタジーで使っている編成を投稿しあうことで、自分手持ちの資源と照らし合わせて効率的な攻略ができるように

http://3.115.251.182/

`$ git clone https://github.com/aigis1/gridbf.git`

<!-- テスト用アカウント	ログイン機能等を実装した場合は、記述しましょう。またBasic認証等を設けている場合は、そのID/Passも記述しましょう。 -->

## 利用方法	
  ページを訪れると、投稿されている編成が一覧できます。  
  条件で絞り込みたい場合は検索するボタンを、投稿するボタンを押すと投稿フォームに飛びます。
  また、表示されている画像をクリックすると詳細情報を見ることができます。  

## 作成理由
  ゲームがリリースされてからそろそろ7年が経つゲームなので、できること、やることがどんどん増えてきています。 
  トライ＆エラーをして攻略をするのに良い編成を探すのですが、状況は着々と変わっていきます。特に武器編成においては初心者だけでなく長年プレイしているユーザーでもしっかり把握できている人は少ないほど複雑です。  
  そんな中で良い編成が知りたいとなった時に調べられるところがあればいいなと思って作成しました。数十万人を超えるアクティブユーザがおり、あらゆる状況のプレイヤーの情報が有効な知識となるはずです。  
  いい編成ができたらそれを共有しあってより快適なプレイができればと思っています

## 機能一覧
  - 編成の投稿
  ![](https://user-images.githubusercontent.com/69403974/101802796-2f7d5780-3b53-11eb-9c16-528b2fb8d8f1.gif)

  - 投稿された編成の一覧
  ![](https://user-images.githubusercontent.com/69403974/101802754-24c2c280-3b53-11eb-8d9f-468e14989514.jpg)
  
  - 投稿内容詳細の閲覧
  ![](https://user-images.githubusercontent.com/69403974/101802695-170d3d00-3b53-11eb-8191-309df72d5d40.jpg)
  
  - 投稿の検索機能
  ![](https://user-images.githubusercontent.com/69403974/101802774-2b513a00-3b53-11eb-8585-ff3b508a83b9.jpg)
  
  - 投稿時間での並び替え機能（未実装）
  - 評価機能（未実装）
  - 日課チェックシート（未実装）
  - 目標覚書（未実装）
  - ユーザー機能（未実装）

<!-- 実装した機能についてのGIFと説明	実装した機能について、それぞれどのような特徴があるのか列挙しましょう。GIFを添えることで、イメージがしやすくなります。 -->

## これから実装したい機能
  - 評価機能
    - 実装することで投稿数が増えた時に選択する際の一つの指針となる
  - 日課チェックシート
    - 項目を各自で編集して、それをセッションを利用して個人でカスタマイズできると良い
  - 目標覚書
    - 強化に必要な素材などをまとめておいたり、目指す編成を保存しておくなどができると良い
  - ユーザー機能
    - 自分の状況を公開することで団活に役立つのではないか

[データベースER図](https://user-images.githubusercontent.com/69403974/101803932-6738cf00-3b54-11eb-929f-a6b603eaf073.png)
<file_sep>/app/views/fagrids/test.rb
def search
  def kenssaku
    if search != ""
      Origin.where(LIKE=?,params)
    elsif category_id != ""
      @category = Origin.where(['category_id = ?, params[:category_id'])
    else
      Origin.all
    end
  end

  def category_search
    @category = Origin.where(['category_id = ?, params[:category_id'])
  end

end



view.rb
<%= f.label :quest_id_eq, 'バトル' %>
<%= f.collection_select :quest_id, Quest.all, :id, :name, include_blank: '指定なし' %>

members = Member.where(['member LIKE ?', "%#{params[:keyword]}%"]).pluck(:member)
<file_sep>/app/models/time_about.rb
class TimeAbout < ActiveHash::Base
  self.data = [
    { id: 1,  name: '〜1分' },
    { id: 2,  name: '〜2分' },
    { id: 3,  name: '〜3分' },
    { id: 4,  name: '〜4分' },
    { id: 5,  name: '〜5分' },
    { id: 6,  name: '〜6分' },
    { id: 7,  name: '〜7分' },
    { id: 8,  name: '〜8分' },
    { id: 9, name: '〜9分' },
    { id: 10, name: '〜10分' },
    { id: 11, name: '10分〜' },
    ]

  include ActiveHash::Associations
  has_many :fagrids
end
