月別アーカイブ: 2017年10月

association先もシリアライズする

Railsでmodelを利用する際にassociation先もシリアライズしたい場合の方法メモ

class CodeMaster < ApplicationRecord
  has_many :code_values

  def as_json options = {}
    super include: :code_values
  end
end
class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception
  before_action :get_menus

  def get_codes
    @codes = CodeMaster.all
  end
end

「as_json」を使ってシリアライズ化する際にassociation先も含める
ただ、親レコード件数文selectが走るので使いどころに注意かも?

seed_fuでidが無いモデルへのデータ投入

Railsでseed_fuを使っている場合にidを削除したモデル(関連テーブルなど)へのデータ投入方法メモ

role_user = CSV.read("db/fixtures/#{Rails.env}/role_user.csv")

role_user.each_with_index do |r, i|
  next if i === 0

  role_id = r[0]
  user_id = r[1]

  RoleUser.seed(:role_id, :user_id) do |s|
    s.role_id   = role_id
    s.user_id = user_id
  end
end

ロールとユーザの関連テーブル(RoleUser role_id:integer user_id:integer)に投入する場合は複合キーを指定する(レコードが一意になる組合せ)

react-railsでimport

せっかくrailsでもreactでcomponent化しているのに再利用したい。

ということでreact-railsを使っている場合に他のcomponentをimportする方法のメモ。

//= require ./components/SubComponent
class MainComponent extends React.Component {
  constructor(props) {
    super(props)
  }
}

相対パスで指定。拡張子「.jsx」は省略して大丈夫でした。

react-bootstrap-tableでselect入力項目のvalueとtext

react-bootstrap-tableのselect入力項目のkey,valueを設定する方法のメモ。

editableでtype: ‘select’でvaluesを設定する方法は公式のドキュメントであるけれども、valueとtextを使う方法が記載されておらずソースを見て調査。

class Kind extends React.Component {
  constructor() {
    super()
    this.state = {
      kinds: [{value: 1, text: '種類A'}, {value: 2, text: '種類B'}, {value: 3, text: '種類C'}]
    }
  }

  render() {
    return (
      <div>
        <BootstrapTable>
          <TableHeaderColumn dataField='kind' editable={{type:'select', options: {values: this.state.kinds}}} dataFormat={}>種類</TableHeaderColumn>
        </BootstrapTable>
      </div>
    )
  }
}

key項目とか記載省略。テーブル上の表示はdataFormatなどで加工する必要があるかも。