laravelで管理画面を作る
インストール
composer require encore/laravel-admin php artisan vendor:publish --provider="Encore\Admin\AdminServiceProvider" php artisan admin:install
最後のコマンドで必要なコントローラー、設定ファイル、データベースを用意してくれる
URLの名前を変えたい
稼働しているサービスと同じプロジェクトで動かしたい場合、デフォルトのadminのままだとセキュリティ上よろしくないので推測されにくい名前に変更しておきましょう。
新たに追加された cofig/admin.php
のprefixを変更すればそれだけで変わります。
'route' => [ 'prefix' => 'hogehoge',
http://localhost:3000/hogehoge
にアクセスして
こんな画面が出ればOKです。
カスタマーサポートツールの調査メモ
サポートツール
- Zendeskは問い合わせをステータスごとに管理できる。毎日大量のメールが送られてくるサービスならオススメ
- メールワイズはZendeskと似てるかも。メールの共有サービス
- Intercomは顧客と直接チャットでサポート。スタートアップ向きかも
メール配信システム
外部サービスを使う
- SendgridやMailchimpが有力
- 海外製のツールは携帯キャリア向けに配信するとなるとキャリア側に迷惑メール扱いされてしまう可能性がある
- ユーザー情報のつなぎこみが必要。CSVをインポートする作業
- 送信失敗(バウンス)が大量発生すると、アカウント停止されるのでリストの定期的な確認が必要 sendgrid.kke.co.jp
その他
- 管理画面作って社内のメールサーバーを使う
- 日本製のメール配信エンジンを使う
react-native-elementでリストを作る
react-native-elementを使ってリストを使おうとすると、 unrecognized font family 'Material Icons`的なエラーがでる時があります。
実はreact-native-vector-iconsはXcodeやAndroid Studioでfont-familyを設定してあげる必要があります。
ただ自分でネイティブ設定するの、めっちゃハマりそうですよね? なのでrnpmというパッケージを使うと、ライブラリで必要なネイティブの設定を自動でやってくれます。
rnpm link react-native-vector-icons
これで再度react-native run-ios
すると反映されます。
こんな感じになればOKです。
railsで多: 多の関連を作る
モデルを作る
テーブルを作る
- 先ほど作ったマイグレーションファイルを編集する
- bundle exec rake db:migrate
モデル間の関連を作る
class User < ApplicationRecord has_many :group_users has_many :groups, through: :group_users end
class GroupUser < ApplicationRecord belongs_to :user belongs_to :group end
class Group < ApplicationRecord has_many :group_users has_many :users, through: :group_users end
current_user.groups
deviseを使っている状態で上記のようにすると、今のユーザーのグループをまとめて取ってくるのようにできる
Railsのフォームで配列とハッシュを併用する
ハッシュだけ、配列だけの書き方は色んな所で書かれているが、 併用した書き方がなかなか見つからず困った。
古いが以下の記事が一通りまとまっていてわかりやすかった。
Rails のフォームで配列形式のデータを扱う方法 - WebOS Goodies
ハッシュのみ
HTML
<input type="text name="user[name]" />
params
user => { name: 'Taro' }
ストロングパラメータ
params.require(:user).permit(:name)
配列のみ
HTML
<input type="text name="name[]" />
params
name => ['Taro', 'Ichiro']
ストロングパラメータ
params.permit(name: [])
- 配列を許可する時は空配列を指定する
ハッシュの配列
HTML
<input type="text name="users[][name]" />
params
users => [ { name: 'Taro' }, { name: 'Ichiro' }, ]
ストロングパラメータ
params.permit(users: [:name])
http://j-caw.co.jp/blog/?p=1590
Strongパラメータの意味
リクエストの内容をそのまま使ってDBを更新すると管理者の状態でユーザー登録できたりと脆弱性をうむので、 Rails4から更新するパラメータのみ許可することになった。ストロングパラメータを使っていないとエラーになる。
requireを使う意味がわかったようなわからないような... 複数のエンティティを同時に送る時には便利そうだが。
react-native-elementをインストールする
yarn add react-native-vector-icons yarn add react-native-elements
react-native-vector-iconsが必ず必要
import { FormLabel, FormInput } from 'react-native-elements' <FormInput onChangeText={(text) => changeInputText(text) } />
入力フォームはこんな感じで使う
Railsのフォームで配列を扱う方法
fields_forとか便利メソッドを使って根本が理解できていないまま、 コードを書くのは応用が効かないので、シンプルに書く。
Webシステムではクライアントからサーバーにリクエストを投げるのにフォームを使う。 nameに指定したキーで値を取り出す。
同じnameのものを複数指定する場合は配列にする。 HTMLで表現すると以下のようになる。
<input type="text" name="name[]" id="name_" class="form-control"> <input type="text" name="name[]" id="name_" class="form-control"> <input type="text" name="name[]" id="name_" class="form-control">
これをRailsのフォームで書く場合はこう。
<% @items.each do |item| %> <%= text_field_tag 'name[]', item.name, class: "form-control" %> <% end %>
Railsではリクエストされた値を受け取るには params
を使う。
name => [1,2,3]
のような形式で受け取ることができる。