#12 deviseでカラムを追加

ユーザー名を表示するためのカラムを追加します。

$ rails g migration AddNameToUser name:string

内容を確認して実行します。

$ rake db:migrate

ユーザー名を編集するためにstrong parametersを設定します。

application_controller.rb

  before_filter :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:account_update) << :name
  end

(過去に同じ様な記事を書いていました)

tsyknsr.hatenablog.com

最後に、ユーザー情報の編集ファイルにユーザー名の編集項目を追加しました。

現在の状態

f:id:tsyknsr:20160706232823p:plain

参考

#11 ransackで検索機能を作成

第11回では、検索機能をつくります。今回はransackを使います。

Gemfileに追加

gem 'ransack'
$ bundle install

以下のリンクを参考にしながら作業を進めていきます。

当初の実装

application_controller.rb

  before_filter :set_search

  def set_search
    @q = Question.ransack(params[:q])
  end

questions_controller.rb

  def index
    @q = Question.ransack(title_or_content_cont: params[:q])
    @questions = @q.result
  end

application.html.slim

= search_form_for @q, url: questions_path do |f|
  = f.search_field :title_or_content_cont

公式のリファレンスを読みながらつくってみたのですが、ransackを利用して検索フォームをヘッダーに設置するにはApplicationControllerのbefore_filterで変数をセットするなど手を加える範囲が広かったため、下記の方法に修正しました。

修正後

questions_controller.rb

  def index
    @questions = Question.ransack(title_or_content_cont: params[:q]).result
  end

application.html.slim

= form_tag questions_path, method: :get do
  = text_field_tag :q, (params[:q] or nil)

search_form_forの使用をやめてform_tagに変更しました。次に「/search?q=キーワード」のようなURLでアクセスするためにルーティングの設定を行います。

routes.rb

get 'search' => 'questions#index', as: :search

無事に動作を確認できたのでbootsnippを利用して検索フォームと検索結果ページを作成し、検索機能を作成しました。

現在の状態

f:id:tsyknsr:20160705222149p:plain

参考

#10 質問投稿ページのスタイリング

質問投稿ページのデザインを整えます。まずはヘッダーのボタンに質問投稿ページへのリンクを設定します。

  • application.html.slim
= link_to 'Ask', new_question_path

ユーザー情報ページで使用したスニペットを利用して、質問投稿ページに適用します。

質問投稿

Before

f:id:tsyknsr:20160704232926p:plain

After

f:id:tsyknsr:20160704232937p:plain

質問編集画面も同じように修正しました。質問機能に関連して、次回は質問の検索機能を実装します。

#9 Bitbucketでプロジェクト管理

第9回では、ソースコードをGitで管理します。三日坊主で終わるかもしれないと思っていたこの開発も地道に継続できているので、Bitbucketにリポジトリを作成して管理していきます。

  1. Bitbucketで新規リポジトリの作成
  2. 「ローカルディレクトリを設定する」のガイドに沿って作業
$ cd /path/to/your/project
$ git init
$ git remote add origin git@bitbucket.org:foo/bar.git
$ git add ./
$ git commit -m 'Initial commit'
$ git push -u origin master

下記のエラーが表示されたので、~/.ssh/configに設定を追加します。

Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

~/.ssh/config

Host bitbucket.org
  HostName bitbucket.org
  IdentityFile ~/.ssh/id_rsa
  User git
$ pbcopy < ~/.ssh/id_rsa.pub

Bitbucketに公開鍵を登録

$ git push -u origin master

無事に作成できました。

参考

#8 サインアップページのスタイリング

第8回では、前回と同じ要領でサインアップ画面・ユーザー情報画面のデザインを整えていきます。Bootsnipp スニペットを検索して、修正を加えながら適用していきます。

サインアップ

Before

f:id:tsyknsr:20160702112725p:plain

After

f:id:tsyknsr:20160702112739p:plain

ユーザー情報

Before

f:id:tsyknsr:20160702110348p:plain

After

f:id:tsyknsr:20160702110857p:plain

#7 ログインページのスタイリング

第7回ではログイン画面のデザインを整えます。今回はBootstrapのスニペットを集めたbootsnippを使います。サイト内からログイン画面に利用できそうなコードを検索して、erb2slim.comでHTMLからslimに変換して使用しました。bootsnippではキーワード検索だけでなく、「login」など利用シーンに応じたタグからも探す事が出来ます。

Before

f:id:tsyknsr:20160702010821p:plain

After

f:id:tsyknsr:20160702010832p:plain

参考

#6 RailsでBootstrapを導入

前回、Pingendoで作成した画面を適用していきます。事前にbootstrap-sassを追加してTwitter Bootstrapを使えるようにします。このタイミングでFont Awesomeを使うためにfont-awesome-railsも追加します。インストール方法・使い方はそれぞれ以下のリンクを参考にしました。

Gemfileに追加

gem 'bootstrap-sass', '~> 3.3.6'
gem "font-awesome-rails"
$ bundle install

CSSファイルをリネーム

$ mv app/assets/stylesheets/application.css app/assets/stylesheets/application.scss

application.scssの以下の項目を削除

 *= require_tree .
 *= require_self

BootstrapとFont Awesomeの読み込みを追加

@import "font-awesome";
@import "bootstrap-sprockets";
@import "bootstrap";

app/assets/javascripts/application.jsに追加

//= require bootstrap-sprockets

再起動後、Bootstrapが反映されていることを確認できました。application.cssをリネームせずに使いたい場合は、Twitter Bootstrapのファイルを直接配置して読み込むという方法もある様です。

Pingendoで生成されたHTMLをerb2slimを利用してブラウザ上でslimに変換します。

f:id:tsyknsr:20160630215613p:plain

あとは変換されたslimのコードをコツコツと反映していきます。たまに変換がうまくいっていない箇所があったので、その場合は直接修正しました。

現在の状態

f:id:tsyknsr:20160630222835p:plain

f:id:tsyknsr:20160630222849p:plain

参考