Railsで多対多の関連をチェックボックスで設定
Railsで多対多の関連をチェックボックスで設定する時のメモ
Model
$ rails g model post name:string $ rails g model tag name:string $ rails g model post_tag post:references tag:references
post.rb
class Post < ActiveRecord::Base has_many :post_tags has_many :tags, through: :post_tags end
tag.rb
class Tag < ActiveRecord::Base has_many :post_tags has_many :posts, through: :post_tags end
post_tag.rb
class PostTag < ActiveRecord::Base belongs_to :post belongs_to :tag end
View
= collection_check_boxes(:post, :tag_ids, Tag.all, :id, :name) do |t| = t.label(class: "checkbox-inline") { t.check_box + t.text }
Controller
def post_params params.require(:post).permit(:name, {:tag_ids => []}) end
参考
RailsのテンプレートをBootstrapが適用されたslimファイルで生成する
RailsのテンプレートをBootstrapが適用されたslimファイルで生成する時のメモ。
RailsのテンプレートをBootstrapが適用されたslimファイルで生成
gem 'slim-rails' gem 'html2slim' gem 'bootstrap-sass' gem 'bootstrap-generators'
$ bundle install $ rails generate bootstrap:install -f
既存のファイルがある場合
erbファイルをslimファイルに変換
$ for i in app/views/**/*.erb; do erb2slim $i ${i%erb}slim && rm $i; done
参考
Carrierwave使用環境でCapistranoでデプロイした時のメモ
Capistranoでデプロイした時に、Carrierwaveでアップロードした画像ディレクトリが削除(上書き)されてしまった時のメモ。
アップローダファイルを修正
下記のリンクを参考にアップローダファイルを修正
def store_dir "system/uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end
nginxの設定修正
example.com.conf
location ~ ^/system/ { root /var/www/example.com/current/public; }
(nginxの設定は勉強中です)
nginxをリスタート後、不具合の解消を無事に確認できました。
その他
画像のアップロード先を変更しない場合の対処法は、動作未確認ですが下記の方法が参考になるかと思いました。
How to get Capistrano to ignore upload directories (Carrierwave)
参考リンク
#18 テストデータを作成
ある程度動くようになってきたので、デバッグを兼ねた動作確認のためにテストデータを生成します。
- Gemfile
gem 'ffaker'
- seeds.rb
10.times do User.create(name: FFaker::Name.name, email: FFaker::Internet.safe_email, password: FFaker::Internet.password) end
$ rake db:seed
同じ要領で他のテストデータも作成しました。
参考
#17 質問閲覧ページの作り込み
旅行に出かけていた関係で開発が滞っていました。 今日からまた再開したいと思います。
質問閲覧ページ
今回は質問閲覧ページを作り込んでいきます。まずは、質問部分です。今回はYahoo知恵袋を参考に構成図を作成しました。
今回作成しているサイトに合わせて整理します。
回答部分もほぼ同じフォーマットだったので、質問部分の構成図を再利用しました。
アイコンは神ツールのiconmonsterで作成しました。
現在の状態
参考サイト
#16 ユーザー名を表示
ユーザー名を表示します。現状ユーザー名の入力が必須項目ではないので、入力がない場合は匿名表示する処理をヘルパーに定義しました。これを各所で利用したいと思います。
def username(user) user.try(:name) || 'Anonymous' end
参考
#15 トップページの作り込み
第15回では、トップページに表示する質問一覧部分のレイアウトや要素を作り込んでいきます。日頃お世話になっているteratailを参考にしました。
ワイヤーフレームの作成
teratailのトップページの質問部分の構成をざっくりと書き起こしてみました。
今回、開発しているサイトで対応できる項目を整理して以下を構成図としました。これを繰り返し表示して、質問一覧のコンテンツとして扱えるようにしたいと思います。
このあと、bootsnippで適当なスニペットを探したのですが、合うものが見つからなかったためBootstrapの公式サイトを見ながらコーディングしました。
現在の状態
次回は一部の処理をヘルパーに移したいと思います。