#3 仕様の作成

第3回に入る前に、改めて仕様を整理しました。実はこの時まで何をつくるか悩んでいたのですが、色々と考えた末にQ&Aサイトをつくることにしました。仕様の整理については「パーフェクト Ruby On Rails」を参考にしました。

パーフェクト Ruby on Rails

パーフェクト Ruby on Rails

主な仕様

  • ユーザはメールアドレス・Facebookアカウントで登録・ログインできる
  • 全ユーザは質問を閲覧できる
    • 質問は作成日時で降順に表示
    • 10件毎にページ送り
    • 質問タイトル・質問本文を対象にキーワード検索できる
  • ログインユーザは質問を作成できる
    • 質問タイトル(任意)
    • 質問本文(必須)
  • ユーザは自分が作成した質問を削除できる
  • ログインユーザは質問に回答できる
    • 回答本文(必須)
  • ログインユーザは退会できる
  • 退会したユーザの情報は削除される
  • 退会したユーザの質問はそのまま残る
  • 質問を作成したユーザが退会している場合、作成したユーザの情報として「退会したユーザです」と表示する
  • 質問に回答したユーザが退会している場合、回答したユーザの情報として「退会したユーザです」と表示する

仕様はつくりながら調整していく予定です。

質問を投稿する

第3回では質問を投稿する機能をつくります。モデルの定義や全体の構成については、Q&Aサイトのオープンソースプロジェクトを参考にしました。

今回はscaffoldを使ってテンプレートを作成します。

$ rails g scaffold question user:references title:string content:text

生成されたマイグレーションファイルのcontentの項目にnull: falseを追加して実行します。

$ rake db:migrate

モデルとコントローラをそれぞれ修正します。

  • Userモデルに追加
has_many :questions
  • questions_controller.rbを修正
  def new
    @question = current_user.questions.build
  end

  def create
    @question = current_user.questions.build(question_params)
    (省略)
  end

今後バリデーションなどの処理は必要ですが、ログインユーザが質問を投稿できるようにりました。

f:id:tsyknsr:20160629095624p:plain

参考