class FoodsController < ApplicationController before_action :set_food, only: [:show, :edit, :update, :destroy] before_action :ensure_valid_user, except: [:index, :show] # GET /foods # GET /foods.json def index @foods = Food.all.order(:name).page(params[:page]).per(params[:per]) if params[:name].present? @foods = @foods.matches_tokens(:name, params[:name].split.take(4)) end end def show end # GET /foods/new def new @food = Food.new end # GET /foods/1/edit def edit ensure_owner @food end # POST /foods # POST /foods.json def create @food = Food.new(food_params) @food.user = current_user if @food.ndbn.present? @food.set_usda_food(UsdaFood.find_by_ndbn(@food.ndbn)) end respond_to do |format| if @food.save format.html { redirect_to foods_path, notice: 'Ingredient was successfully created.' } format.json { render json: { success: true }, status: :created, location: @food } else format.html { render :new } format.json { render json: @food.errors, status: :unprocessable_entity } end end end # PATCH/PUT /foods/1 def update ensure_owner @food do @food.assign_attributes(food_params) if @food.ndbn.present? @food.set_usda_food(UsdaFood.find_by_ndbn(@food.ndbn)) end respond_to do |format| if @food.save format.html { redirect_to foods_path, notice: 'Ingredient was successfully updated.' } format.json { render json: { success: true }, status: :ok, location: @food } else format.html { render :edit } format.json { render json: @food.errors, status: :unprocessable_entity } end end end end # DELETE /foods/1 # DELETE /foods/1.json def destroy ensure_owner @food do @food.destroy respond_to do |format| format.html { redirect_to foods_url, notice: 'Ingredient was successfully destroyed.' } format.json { head :no_content } end end end def select_ndbn if params[:id].present? @food = Food.find(params[:id]) else @food = Food.new end @food.assign_attributes(food_params) if @food.ndbn.present? @food.set_usda_food(UsdaFood.find_by_ndbn(@food.ndbn)) end render :show end def search @foods = Food.search(params[:query]).order(:name) end def convert @conversion = Conversion.new(conversion_params) if @conversion.valid? @output_quantity = @conversion.output_quantity @conversion = Conversion.new else @output_quantity = '' end end def usda_food_search @foods = UsdaFood.search(params[:query]).limit(250).order(:long_description) respond_to do |format| format.html { render :layout => false } format.json { } end end private # Use callbacks to share common setup or constraints between actions. def set_food @food = Food.find(params[:id]) end # Never trust parameters from the scary internet, only allow the white list through. def food_params params.require(:food).permit(:name, :notes, :ndbn, :density, :water, :protein, :lipids, :carbohydrates, :kcal, :fiber, :sugar, :calcium, :sodium, :vit_k, :ash, :iron, :magnesium, :phosphorus, :potassium, :zinc, :copper, :manganese, :vit_c, :vit_b6, :vit_b12, :vit_a, :vit_e, :vit_d, :cholesterol, :ingredient_units_attributes => [:name, :gram_weight, :id, :_destroy]) end def conversion_params params.require(:conversion).permit(:input_quantity, :input_units, :scale, :output_units, :ingredient_id) end end