Rails4のhas_many throughで条件を指定してレコードを参照する
目的
Rails4のhas_many throughで条件を指定してレコードを参照する
前提
rails 4.0.0を使います。 テーブルは以下のように作っているとします。
#relationshipテーブル id: integer member_id: integer event_id: integer flg: boolean status: integer #memberテーブル id: integer #eventテーブル id: integer
model/relationship.rb
まずはrelationshipモデルで関連付けをします。
belongs_to :member, class_name: "Member" belongs_to :event, class_name: "Event"
model/event.rb
次にeventモデルで参照について記述します。 ここでは、relationshipテーブルのflgカラムがtrueのレコードと、statusカラムが'3'のレコードを取得しています。
has_many :relationships, foreign_key: "event_id", dependent: :destroy has_many :hoge, -> {where flg: true}, class_name: "Relationship", through: :relationships, source: :member has_many :fuga, -> { where "status = 3"}, through: :relationships, source: :member
以上でhas_many throughで条件を指定してレコードを参照することができます。
参考
Capistrano 3 の設定
目的
Capistrano 3.x でデプロイ環境を作ること。
環境
- 開発、本番環境ともに、rbenv(0.4.0)でRuby( 2.0.0-p247)をインストール済み。
- 本番サーバーはAWS EC2 Linux。インスタンスとセキュリティーグループ設定済み。
- レポジトリ管理はgithub。github上にてレポジトリ作成済み。開発、本番環境ともに、ssh-keyの設定済み。
- DBは開発、本番環境ともにsqlite。
- 本番環境のデプロイ先のディレクトリは、/var/www/。
Gemfile
Gemfileを編集します。
group :development do gem "capistrano-bundler" gem "capistrano-rails" gem "capistrano-rbenv" end
続いてインストール。
bundle install bundle exec cap install
Capfile
出来上がったCapfileを編集します。
require 'capistrano/setup' require 'capistrano/deploy' require 'capistrano/rbenv' set :rbenv_type, :system set :rbenv_ruby, "2.0.0-p247" require 'capistrano/bundler' require 'capistrano/rails/assets' require 'capistrano/rails/migrations' Dir.glob('lib/capistrano/tasks/*.cap').each { |r| import r }
config/deploy.rb
deploy.rbでデプロイ先のディレクトリと、レポジトリなどの設定をします。
lock '3.1.0' set :application, <application_name> set :scm, :git set :repo_url, 'git@github.com:<git_user_name>/<repository>.git' set :deploy_to, '/var/www/<application_name>' set :branch, "master" set :format, :pretty set :log_level, :debug set :keep_releases, 5 namespace :deploy do desc "Restart application" task :restart do on roles(:app), in: :sequence, wait: 5 do execute :mkdir, '-p', release_path.join('tmp') excute :touch, release_path.join("tmp/restart.txt") end end after :finishing, "deploy:cleanup" end
config/deploy/production.rb
本番環境のサーバー接続の設定をします。
set :stage, :production role :app, %w{ec2-user@ec2-XX-XXX-XX-XX.region.compute.amazonaws.com} role :web, %w{ec2-user@ec2-XX-XXX-XX-XX.region.compute.amazonaws.com} role :db, %w{ec2-user@ec2-XX-XXX-XX-XX.region.compute.amazonaws.com} set :ssh_options, { keys: [File.expand_path('~/.ssh/<public_key>')], forward_agent: true }
デプロイ
cap production deploy
参考文献
AWS EC2でGitを設定
GitをEC2サーバにインストール
[ec2-user@ip-XX-XX-XXX-XX ~]$ sudo yum install git
EC2サーバの/var/www/のパーミションを追加
[ec2-user@ip-XX-XX-XXX-XX ~]$ sudo chgrp ec2-user /var/www [ec2-user@ip-XX-XX-XXX-XX ~]$ sudo chmod 775 /var/www [ec2-user@ip-XX-XX-XXX-XX ~]$ sudo chown -R ec2-user /var/www/
EC2サーバのpublic keyを作成
[ec2-user@ip-XX-XX-XXX-XX ~]$ ssh-keygen [ec2-user@ip-XX-XX-XXX-XX ~]$ sudo chmod 700 /home/ec2-user/.ssh/id_rsa.pub [ec2-user@ip-XX-XX-XXX-XX ~]$ ssh-add /home/ec2-user/.ssh/id_rsa.pub
(ssh-addでエラーが出た場合)
[ec2-user@ip-XX-XX-XXX-XX ~]$ eval `ssh-agent -s` [ec2-user@ip-XX-XX-XXX-XX ~]$ ssh-add /home/ec2-user/.ssh/id_rsa.pub
EC2サーバのid_rsa.pubの中身をコピー
[ec2-user@ip-XX-XX-XXX-XX ~]$ vim /home/ec2-user/.ssh/id_rsa.pub
githubに公開キーを登録
githubのaccount setting ページのSSH keys に行き、Add ssh keyを押して、先ほどコピーしたid_rsa.pubの中身をペースト。