diff --git a/app/controllers/logs_controller.rb b/app/controllers/logs_controller.rb new file mode 100644 index 0000000..35ad1dd --- /dev/null +++ b/app/controllers/logs_controller.rb @@ -0,0 +1,79 @@ +class LogsController < ApplicationController + + before_action :set_log, only: [:show, :edit, :update, :destroy] + before_action :set_recipe, only: [:index, :new, :create] + before_action :require_recipe, only: [:new, :create] + + before_filter :ensure_valid_user + + def index + @logs = Log.for_user(current_user) + if @recipe + @logs = @logs.for_recipe(@recipe) + end + end + + def show + ensure_owner(@log) + end + + def edit + ensure_owner(@log) + end + + def update + ensure_owner(@log) do + if @log.update(log_params) + redirect_to @log, notice: 'Log Entry was successfully updated.' + else + render :edit + end + end + end + + def new + @log = Log.new + end + + def create + @log = Recipe.new(log_params) + @log.user = current_user + @log.souce_recipe = @recipe + + if @log.save + redirect_to @log, notice: 'Log Entry was successfully created.' + else + render :new + end + end + + def destroy + ensure_owner(@log) do + @log.destroy + redirect_to logs_url, notice: 'Log Entry was successfully destroyed.' + end + end + + private + + def set_log + @log = Log.find(params[:id]) + end + + def set_recipe + if params[:recipe_id].present? + @recipe = Recipe.find(params[:recipe_id]) + end + end + + def require_recepe + unless @recipe + raise ActiveRecord::RecordNotFound + end + end + + def log_params + params.require(:log).permit() + end + +end \ No newline at end of file diff --git a/app/models/log.rb b/app/models/log.rb new file mode 100644 index 0000000..01be794 --- /dev/null +++ b/app/models/log.rb @@ -0,0 +1,13 @@ +class Log < ActiveRecord::Base + + belongs_to :recipe + belongs_to :source_recipe, class_name: 'Recipe' + belongs_to :user + + validates :date, presence: true + validates :user_id, presence: true + + scope :for_user, ->(user) { where(user: user) } + scope :for_recipe, ->(recipe) { where(source_recipe: recipe) } + +end diff --git a/app/views/logs/_form.html.erb b/app/views/logs/_form.html.erb new file mode 100644 index 0000000..d84b0f7 --- /dev/null +++ b/app/views/logs/_form.html.erb @@ -0,0 +1,11 @@ + +<%= form_for(@log) do |f| %> + + <%= render partial: 'shared/error_list', locals: {model: @log} %> + +