TechBox

スタートアップで働くRails&機械学習エンジニアのブログ。

Railsでreferencesを使用した外部キーに、同時にUnique属性を設定する

Railsで新しいモデル(テーブル)の作成で外部キー(外部参照)を設定する時に、
同時にユニーク属性を設定していく手順を記載します。
余り使う機会はないかもしれませんが、今回は以下の例を使っていきます。

(例)Userが複数のOrganizationに所属できる多対多の関係で、そのうちの一のOrganizationをデフォルトとして保持するDefaultOrganizationテーブルを作成する場合。
   以下がER図です。

f:id:daisuke-jp:20190116100404p:plain

試行錯誤して結果を得たので、経過も踏まえて記述します。 解答に書いている事がやり方なので、手早く正解が欲しい方はそちらをご覧下さい。

  • なぜ必要なのか
  • 普通に外部参照だけをする場合
  • index作成と同じ要領でuniqueしてみる
    • 1ファイル内で指定
    • 2ファイル内で別々に指定
  • インデックス付与だけを別に実行
  • 解答
続きを読む

has_many :throughな多対多のリレーションから、中間テーブルの項目を使って1レコードを取得する

今回はRubyOnRailsでのActive Recordのアソシエーションの話です。

ユーザーが複数の組織に所属可能っていうシステムを作っていく時に、ユーザーのデフォルトの組織を設定したり、 逆に組織に対して代表者を1人決めたいって状況があると思います。
そんな時、中間テーブルのステータスなりフラグを使って1レコード絞って表示したいと思ってやってみると、 案外どーやるんだろ?ってなったりします。
そんな時の自分なりのやり方。

f:id:daisuke-jp:20160915112130p:plain

  • 多対多のリレーションとは
    • (例)UserとOrganizationの関係
  • 中間テーブルを作る
  • UserのデフォルトOrganizationを設定する
続きを読む

Railsのプロジェクト名と、GitHubのリポジトリ名を変更する

f:id:daisuke-jp:20160906093046j:plain

Ruby on Railsでrails newした後に、やっぱりアプリ名(プロジェクト名)を変更したい!って思った時、 ついでにもうGitHubにプッシュしちゃったんだけど…って場合もあると思います。

そういった場合の、Railsプロジェクト名の変更方法と、GitHubのリポジトリ名の変更方法を記載します。 もちろん、両方変更も可能です!

  • 手順
    • rails側の変更
    • GitHub
    • ローカルリポジトリ
    • GitHub Desktop
    • ATOM
続きを読む

deviseとcancancanで会員登録と権限管理を行い、管理者だけにrails_adminを公開する

f:id:daisuke-jp:20190116102450p:plain

Railsで手早くユーザー管理と権限設定を行いたい時に、deviseとcancancanを、 phpadmin的な、管理者がデータを直接確認出来るような仕組みを取り入れたい時にはrails_adminが便利です。

  • 解説
  • 手順
    • gemのインストール
    • deviseのセットアップ
    • cancancanのセットアップ
    • rails_adminのセットアップ
    • adminの判定を追加
    • rails_adminの確認

解説

  • devise ユーザー管理(メールを送ったり、パスワードのリマインドなども可能)
    ⇒どこのサイトでもよくある、メールアドレスで登録して、確認メールが来てっていう一連の動作がこのgemだけで作れる。
  • cancancan 権限管理(モデル毎のアクセス権も細かく設定出来る)
    ⇒deviseで作ったユーザーに権限を与えて、例えば管理者は全ての機能を使えるけど、ユーザーは全ての機能のEditしかできないって事も可能。
    indexではmodelとuserの関連付けを見て、勝手に自分に閲覧権限がある物のみを表示するっていうメッチャ便利な動きもしてくれる。
  • rails_admin 管理者のデータ管理機能
続きを読む