ステーキホイザード


Phillyチーズケーキあなたがそれを愛しているかどうか、あなたはおそらく最高のものである終わりのない議論を聞いたことがあるかどうか.
Enter Steak Whizard - Webアプリケーションだけでフィリーズで最高のステーキを見つけるために専用.レビュー、レート、および議論を解決しましょう.
アプリケーションは、応答フロントエンド(およびブートストラップライブラリの非常に有り難い助け)とRuby on Rails PostgreSQLデータベースでバックエンドで構築されています.herokuに主催される.
データベースのテーブルにマップされている3つの異なるRailsモデルがあります.レビューテーブルは、ユーザーの1つのインスタンスとステーキの1つのインスタンスに属する結合テーブルです.
class Review < ApplicationRecord
    validates :rating, presence: true, numericality: { greater_than_or_equal_to: 0, less_than_or_equal_to: 10 }
    validates :toppings, presence: true
    validates :title, presence: true

    belongs_to :user
    belongs_to :steak
end
ユーザーは多くのレビューとレビューを介して多くのステーキがあります:
class User < ApplicationRecord
    validates :username, presence: true, uniqueness: true
    validates :fav_steak, presence: true

    has_many :reviews
    has_many :steaks, through: :reviews
end
ステーキは、レビューを介して多くのレビューと多くのユーザーがあります:
class Steak < ApplicationRecord
    validates :restaurant, presence: true, uniqueness: true

    has_many :reviews
    has_many :users, through: :reviews
end
また、有効なデータがデータベースに保存されていることを確認するために、アクティブなレコード検証を使用します.
サイトはユーザーにユーザ名とパスワードでアカウントを作成するよう依頼します.パスワードが保存され、bcryptとハッシュされ、安全にデータベースに格納されます.
ユーザーが独自のユーザ名を持つアカウントを正常に作成すると、ユーザーコントローラ内のユーザー固有のIDでセッションが作成されます.
def create
    user = User.create!(user_params)
    session[:user_id] = user.id
    render json: user, status: :created
end
アプリケーションコントローラ内でauthorize メソッドは現在のユーザを:user_id セッションで保持し、インスタンス変数に代入します@current_user , 変数が真でない場合、エラー応答をレンダリングします.
before_action :authorize

private

def authorize
    @current_user = User.find_by(id: session[:user_id])
    render json: { error: ["Not authorized"] }, status: :unauthorized unless @current_user
end
注意before_action コントローラアクションの前に実行するメソッドです.他のコントローラがアプリケーションコントローラから継承するとき、これは、ユーザーが要求した内容を表示する権限があることを保証します.
アプリケーションは4つのページクライアントサイドルーティングによって提供-ホーム、最高のステーキ、私のレビュー、およびステーキを追加します.
ホームは着陸ページとして機能し、カードコンポーネントとしてステーキクラスの各インスタンスをレンダリングします.カードは、“お気に入り”と“レビュー”ボタンを、条件に応じてユーザーのレビューとお気に入りのステーキに依存してレンダリング含まれています

バックエンドでは、ユーザーがステーキを確認すると、投稿要求はcreate レビューコントローラのメソッド
class ReviewsController < ApplicationController

    def create
        review = @current_user.reviews.create!(review_params)
        steak = Steak.find(params[:steak_id])
        steak.update(rating: steak.calc_avg_rating)
        render json: @current_user, status: :created
    end

    private

    def review_params
        params.permit(:steak_id, :title, :comment, :rating, :toppings)
    end
end
このメソッドは、@current_user 変数.
レビューされたステーキは[:steak_id] を返します.ステーキの評価は、インスタンスメソッドによって返される値で更新されますcalc_avg_rating :
class Steak < ApplicationRecord
    def calc_avg_rating
        self.reviews.average(:rating)
    end
end
方法は、ステーキの関連したレビューから平均評価を計算するために能動レコード協会および方法をハーネスする.
最良のステーキページはAPIエンドポイントから取得します/steaks/highest-rated そして、対応するレビューで対応するステーキをレンダリングします.バックエンドでは、エンドポイントはhighest_rated Steaksコントローラのメソッド
def highest_rated
    max = Steak.maximum(:rating)
    render json: Steak.where(rating: max)
end
ページでは、ステーキの関連レビューは、同様に感謝してレンダリングされますhas_many :reviews ステーキシリアル化における関係
class SteakSerializer < ActiveModel::Serializer
    attributes :id, :restaurant, :rating
    has_many :reviews
end
同様に、My Reviewページには、同じ関連付けを使用しているが、ユーザーシリアライザーで現在のユーザーインスタンスに関連付けられたレビューが表示されます.
class UserSerializer < ActiveModel::Serializer
  attributes :id, :username, :fav_steak

  has_many :reviews
  has_many :steaks
end
最後に、追加のステーキページで、ユーザーはステーキクラスの新しいインスタンスを作成し、対応するレビューを残します.

そこには、ステーキホイザード.それはスピンを与えると私はあなたの考えを知っている-誰が知っている、あなたも道に沿ってお好みのフィリーチーズケーキを見つけることができます.