简体   繁体   中英

error message: undefined method `create' for #<GymClass:0x000000000d696c18> Did you mean? created_at. Trying to use policy design patter

Im trying to use the policy design pattern but cant seem to get it to work. It's saying that my create method in undefined but cant figure out why. Please help: This is my policy file:

class GymClassPolicy < ApplicationPolicy
    attr_reader :user, :gym_class  
    def initialize(user, gym_class)
      @user = user
      @gym_class = gym_class
    end

    def create?
      user.admin?
    end


  end

This is my controller. I am trying to use the policy design pattern in the create method

require 'observer'
require './app/policies/gym_class_policy'


class GymClassesController < ApplicationController
  include Observable
  before_action :set_gym_class, only: [:show, :edit, :update, :destroy]

  # GET /gym_classes
  # GET /gym_classes.json
  def index
    @gym_classes = GymClass.all

  end




  # GET /gym_classes/1
  # GET /gym_classes/1.json
  def show
  end

  # GET /gym_classes/new
  def new
    @gym_class = GymClass.new

  end


  # GET /gym_classes/1/edit
  def edit
  end
  def gym_class_policy
    @_gym_class_policy ||= GymClassPolicy.new(gym_class)
  end 

  # POST /gym_classes
  # POST /gym_classes.json
  def create
    @gym_class = GymClass.new(gym_class_params)
    authorize @gym_class
    if @gym_class.create(gym_class_params)
      redirect_to @post
    else
      render :edit
    end



    respond_to do |format|
      if @gym_class.save
        format.html { redirect_to @gym_class, notice: 'Gym class was successfully created.' }
        format.json { render :show, status: :created, location: @gym_class }
      else
        format.html { render :new }
        format.json { render json: @gym_class.errors, status: :unprocessable_entity }
      end
    end




  end


  # PATCH/PUT /gym_classes/1
  # PATCH/PUT /gym_classes/1.json
  def update
    respond_to do |format|
      if @gym_class.update(gym_class_params)
        format.html { redirect_to @gym_class, notice: 'Gym class was successfully updated.' }
        format.json { render :show, status: :ok, location: @gym_class }

      else
        format.html { render :edit }
        format.json { render json: @gym_class.errors, status: :unprocessable_entity }
      end
    end
  end


  # DELETE /gym_classes/1
  # DELETE /gym_classes/1.json
  def destroy
    @gym_class.destroy
    respond_to do |format|
      format.html { redirect_to gym_classes_url, notice: 'Gym class was successfully destroyed.' }
      format.json { head :no_content }
    end
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_gym_class
      @gym_class = GymClass.find(params[:id])
    end

    # Only allow a list of trusted parameters through.
    def gym_class_params
      params.require(:gym_class).permit(:Type, :PTName, :Date, :Time)
    end
    def Time=(new_Time)
      @Time = new_Time
      notify_observers(self)
    end

end

Lastly this is my full trace: ** activemodel (6.0.2.1) lib/active_model/attribute_methods.rb:431:in method_missing' app/controllers/gym_classes_controller.rb:43:in create' actionpack (6.0.2.1) lib/action_controller/metal/basic_implicit_render.rb:6:in send_action' actionpack (6.0.2.1) lib/abstract_controller/base.rb:196:in process_action' actionpack (6.0.2.1) lib/action_controller/metal/rendering.rb:30:in process_action' actionpack (6.0.2.1) lib/abstract_controller/callbacks.rb:42:in block in process_action' activesupport (6.0.2.1) lib/active_support/callbacks.rb:135:in run_callbacks' actionpack (6.0.2.1) lib/abstract_controller/callbacks.rb:41:in process_action' actionpack (6.0.2.1) lib/action_controller/metal/rescue.rb:22:in process_action' actionpack (6.0.2.1) lib/action_controller/metal/instrumentation.rb:33:in block in process_action' activesupport (6.0.2.1) lib/active_support/notifications.rb:180:in block in instrument' activesupport (6.0.2.1) lib/active_support/notifications/instrumenter.rb:24:in block in instrument' activesupport (6.0.2.1) lib/active_support/notifications/instrumenter.rb:24:in instrument' activesupport (6.0.2.1) lib/active_support/notifications.rb:180:in instrument' actionpack (6.0.2.1) lib/action_controller/metal/instrumentation.rb:32:in process_action' actionpack (6.0.2.1) lib/action_controller/metal/params_wrapper.rb:245:in process_action' activerecord (6.0.2.1) lib/active_record/railties/controller_runtime.rb:27:in process_action' actionpack (6.0.2.1) lib/abstract_controller/base.rb:136:in process' actionview (6.0.2.1) lib/action_view/rendering.rb:39:in process' actionpack (6.0.2.1) lib/action_controller/metal.rb:191:in dispatch' actionpack (6.0.2.1) lib/action_controller/metal.rb:252:in dispatch' actionpack (6.0.2.1) lib/action_dispatch/routing/route_set.rb:51:in dispatch' actionpack (6.0.2.1) lib/action_dispatch/routing/route_set.rb:33:in serve' actionpack (6.0.2.1) lib/action_dispatch/journey/router.rb:49:in block in serve' actionpack (6.0.2.1) lib/action_dispatch/journey/router.rb:32:in each' actionpack (6.0.2.1) lib/action_dispatch /journey/router.rb:32:in serve' actionpack (6.0.2.1) lib/action_dispatch/routing/route_set.rb:837:in call' rack-pjax (1.1.0) lib/rack/pjax.rb:12:in call' remotipart (1.4.4) lib/remotipart/middleware.rb:32:in call' warden (1.2.8) lib/warden/manager.rb:36:in block in call' warden (1.2.8) lib/warden/manager.rb:34:in catch' warden (1.2.8) lib/warden/manager.rb:34:in call' rack (2.2.2) lib/rack/tempfile_reaper.rb:15:in call' rack (2.2.2) lib/rack/etag.rb:27:in call' rack (2.2.2) lib/rack/conditional_get.rb:40:in call' rack (2.2.2) lib/rack/head.rb:12:in call' actionpack (6.0.2.1) lib/action_dispatch/http/content_security_policy.rb:18:in call' rack (2.2.2) lib/rack/session/abstract/id.rb:266:in context' rack (2.2.2) lib/rack/session/abstract/id.rb:260:in call' actionpack (6.0.2.1) lib/action_dispatch/middleware/cookies.rb:648:in call' activerecord (6.0.2.1) lib/active_record/migration.rb:567:in call' actionpack (6.0.2.1) lib/action_dispatch/middleware/callbacks.rb:27:in block in call' activesupport (6.0.2.1) lib/active_support/callbacks.rb:101:in block in call' activesupport (6.0.2.1) lib/active_support/callbacks.rb:101:in run_callbacks' actionpack (6.0.2.1) lib/action_dispatch/middleware/callbacks.rb:26:in call' actionpack (6.0.2.1) lib/action_dispatch/middleware/executor.rb:14:in call' actionpack (6.0.2.1) lib/action_dispatch/middleware/actionable_exceptions.rb:17:in call' actionpack (6.0.2.1) lib/action_dispatch/middleware/debug_exceptions.rb:32:in call' web-console (4.0.1) lib/web_console/middleware.rb:132:in call_app' web-console (4.0.1) lib/web_console/middleware.rb:28:in block in call' web-console (4.0.1) lib/web_console/middleware.rb:17:in catch' web-console (4.0.1) lib/web_console/middleware.rb:17:in call' actionpack (6.0.2.1) lib/action_dispatch/middleware/show_exceptions.rb:33:in call' railties (6.0.2.1) lib/rails/rack/logger.rb:38:in call_app' railties (6.0.2.1) lib/rails/rack/logger.rb:26:in block in call' activesupport (6.0.2.1) lib/active_support/tagged_logging.rb:80:in block in tagged' activesupport (6.0.2.1) lib/active_support/tagg ed_logging.rb:28:in tagged' activesupport (6.0.2.1) lib/active_support/tagged_logging.rb:80:in tagged' railties (6.0.2.1) lib/rails/rack/logger.rb:26:in call' sprockets-rails (3.2.1) lib/sprockets/rails/quiet_assets.rb:13:in call' actionpack (6.0.2.1) lib/action_dispatch/middleware/remote_ip.rb:81:in call' actionpack (6.0.2.1) lib/action_dispatch/middleware/request_id.rb:27:in call' rack (2.2.2) lib/rack/method_override.rb:24:in call' rack (2.2.2) lib/rack/runtime.rb:22:in call' activesupport (6.0.2.1) lib/active_support/cache/strategy/local_cache_middleware.rb:29:in call' actionpack (6.0.2.1) lib/action_dispatch/middleware/executor.rb:14:in call' actionpack (6.0.2.1) lib/action_dispatch/middleware/static.rb:126:in call' rack (2.2.2) lib/rack/sendfile.rb:110:in call' actionpack (6.0.2.1) lib/action_dispatch/middleware/host_authorization.rb:83:in call' webpacker (4.2.2) lib/webpacker/dev_server_proxy.rb:23:in perform_request' rack-proxy (0.6.5) lib/rack/proxy.rb:57:in call' railties (6.0.2.1) lib/rails/engine.rb:526:in call' railties (6.0.2.1) lib/rails/engine.rb:526:in call' puma (4.3.1) lib/puma/configuration.rb:228:in call' puma (4.3.1) lib/puma/server.rb:681:in handle_request' puma (4.3.1) lib/puma/server.rb:472:in process_client' puma (4.3.1) lib/puma/server.rb:328:in block in run' puma (4.3.1) lib/puma/thread_pool.rb:134:in `block in spawn_thread' **

Change create to save at app/controllers/gym_classes_controller.rb:43

@gym_class = GymClass.new(gym_class_params)
authorize @gym_class
if @gym_class.save(gym_class_params)
  redirect_to @post
...

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM