2014-09-18 80 views
0

我是初學者...我收到以下錯誤:語法錯誤,意外 '(',希望keyword_end

SyntaxError - syntax error, unexpected '(', expecting keyword_end 
      authorize @vote, :update?(user, record) 
            ^
/Users/louismorin/code/CP299/app/controllers/votes_controller.rb:28: syntax error, unexpected ')', expecting '=': 
    app/controllers/votes_controller.rb:28:in `' 
    activesupport (4.0.5) lib/active_support/dependencies.rb:424:in `block in load_file' 
    activesupport (4.0.5) lib/active_support/dependencies.rb:616:in `new_constants_in' 
    activesupport (4.0.5) lib/active_support/dependencies.rb:423:in `load_file' 
    activesupport (4.0.5) lib/active_support/dependencies.rb:324:in `require_or_load' 
    activesupport (4.0.5) lib/active_support/dependencies.rb:463:in `load_missing_constant' 
    activesupport (4.0.5) lib/active_support/dependencies.rb:184:in `const_missing' 
    activesupport (4.0.5) lib/active_support/inflector/methods.rb:226:in `block in constantize' 
    activesupport (4.0.5) lib/active_support/inflector/methods.rb:224:in `constantize' 
    activesupport (4.0.5) lib/active_support/dependencies.rb:535:in `get' 
    activesupport (4.0.5) lib/active_support/dependencies.rb:566:in `constantize' 
    actionpack (4.0.5) lib/action_dispatch/routing/route_set.rb:76:in `controller_reference' 
    actionpack (4.0.5) lib/action_dispatch/routing/route_set.rb:66:in `controller' 
    actionpack (4.0.5) lib/action_dispatch/routing/route_set.rb:44:in `call' 
    actionpack (4.0.5) lib/action_dispatch/journey/router.rb:71:in `block in call' 
    actionpack (4.0.5) lib/action_dispatch/journey/router.rb:59:in `call' 
    actionpack (4.0.5) lib/action_dispatch/routing/route_set.rb:674:in `call' 
    warden (1.2.3) lib/warden/manager.rb:35:in `block in call' 
    warden (1.2.3) lib/warden/manager.rb:34:in `call' 
    rack (1.5.2) lib/rack/etag.rb:23:in `call' 
    rack (1.5.2) lib/rack/conditionalget.rb:35:in `call' 
    rack (1.5.2) lib/rack/head.rb:11:in `call' 
    actionpack (4.0.5) lib/action_dispatch/middleware/params_parser.rb:27:in `call' 
    actionpack (4.0.5) lib/action_dispatch/middleware/flash.rb:241:in `call' 
    rack (1.5.2) lib/rack/session/abstract/id.rb:225:in `context' 
    rack (1.5.2) lib/rack/session/abstract/id.rb:220:in `call' 
    actionpack (4.0.5) lib/action_dispatch/middleware/cookies.rb:486:in `call' 
    activerecord (4.0.5) lib/active_record/query_cache.rb:36:in `call' 
    activerecord (4.0.5) lib/active_record/connection_adapters/abstract/connection_pool.rb:626:in `call' 
    activerecord (4.0.5) lib/active_record/migration.rb:373:in `call' 
    actionpack (4.0.5) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call' 
    activesupport (4.0.5) lib/active_support/callbacks.rb:373:in `_run__3205659148210679757__call__callbacks' 
    activesupport (4.0.5) lib/active_support/callbacks.rb:80:in `run_callbacks' 
    actionpack (4.0.5) lib/action_dispatch/middleware/callbacks.rb:27:in `call' 
    actionpack (4.0.5) lib/action_dispatch/middleware/reloader.rb:64:in `call' 
    actionpack (4.0.5) lib/action_dispatch/middleware/remote_ip.rb:76:in `call' 
    better_errors (2.0.0) lib/better_errors/middleware.rb:84:in `protected_app_call' 
    better_errors (2.0.0) lib/better_errors/middleware.rb:79:in `better_errors_call' 
    better_errors (2.0.0) lib/better_errors/middleware.rb:57:in `call' 
    actionpack (4.0.5) lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call' 
    actionpack (4.0.5) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call' 
    railties (4.0.5) lib/rails/rack/logger.rb:38:in `call_app' 
    railties (4.0.5) lib/rails/rack/logger.rb:20:in `block in call' 
    activesupport (4.0.5) lib/active_support/tagged_logging.rb:68:in `block in tagged' 
    activesupport (4.0.5) lib/active_support/tagged_logging.rb:26:in `tagged' 
    activesupport (4.0.5) lib/active_support/tagged_logging.rb:68:in `tagged' 
    railties (4.0.5) lib/rails/rack/logger.rb:20:in `call' 
    actionpack (4.0.5) lib/action_dispatch/middleware/request_id.rb:21:in `call' 
    rack (1.5.2) lib/rack/methodoverride.rb:21:in `call' 
    rack (1.5.2) lib/rack/runtime.rb:17:in `call' 
    activesupport (4.0.5) lib/active_support/cache/strategy/local_cache.rb:83:in `call' 
    rack (1.5.2) lib/rack/lock.rb:17:in `call' 
    actionpack (4.0.5) lib/action_dispatch/middleware/static.rb:64:in `call' 
    rack (1.5.2) lib/rack/sendfile.rb:112:in `call' 
    railties (4.0.5) lib/rails/engine.rb:511:in `call' 
    railties (4.0.5) lib/rails/application.rb:97:in `call' 
    rack (1.5.2) lib/rack/lock.rb:17:in `call' 
    rack (1.5.2) lib/rack/content_length.rb:14:in `call' 
    rack (1.5.2) lib/rack/handler/webrick.rb:60:in `service' 
    /Users/louismorin/.rbenv/versions/2.1.2/lib/ruby/2.1.0/webrick/httpserver.rb:138:in `service' 
    /Users/louismorin/.rbenv/versions/2.1.2/lib/ruby/2.1.0/webrick/httpserver.rb:94:in `run' 
    /Users/louismorin/.rbenv/versions/2.1.2/lib/ruby/2.1.0/webrick/server.rb:295:in `block in start_thread' 

Here is my code for votes_controller.rb: 

     class VotesController < ApplicationController 
      before_action :load_post_and_vote 


      def up_vote 
       # http://apidock.com/rails/ActionController/Base/redirect_to 
       update_vote!(1) 
       redirect_to :back 
      end 

      def down_vote 
       update_vote!(-1) 
       redirect_to :back 
      end 

      private 

      def load_post_and_vote 
       # extract into this method the definition of @post and @vote 
       @post = Post.find(params[:post_id]) 
       @vote = @post.votes.where(user_id: current_user) 
      end 

      def update_vote!(new_value) 
       # Extract vote updating/creating logic here. 
      # This method has access to @vote, because of the before_action 
      if @vote 
       authorize @vote, :update?(user, record) 
       @vote.update_attribute(:value, 1) 
      else 
       @vote = current_user.votes.build(value: 1, post: @post) 
       authorize @vote, :create? 
       @vote.save 
      end 
      end 
    end 

我試圖調用此方法:

def update?(user, record) 
    can_moderate? 
    end 

當我刪除(用戶,記錄):更新?我得到錯誤的參數錯誤數。當我嘗試並從主題頁upvote帖子時遇到此錯誤。

感謝您的幫助...

我使用的權威人士爲authorize

class ApplicationController < ActionController::Base 
    # Prevent CSRF attacks by raising an exception. 
    # For APIs, you may want to use :null_session instead. 
    include Pundit 
    protect_from_forgery with: :exception 
    before_action :configure_permitted_parameters, if: :devise_controller? 


     rescue_from Pundit:NotAuthorizedError do |exception| 
     redirect_to root_url, alert: exception.message 
     end 

    protected 

    def configure_permitted_parameters 
     devise_parameter_sanitizer.for(:sign_up) << :name 
    end 
end 
+4

':update?(user,record)'是不正確的Ruby語法。 ':update?'代表一個不能帶參數的符號。你的意思是'更新(用戶,記錄)'?什麼是'authorize'方法? – lurker 2014-09-18 19:49:22

+0

你忘了把update_vote放到「end」!方法。把方法的額外結束 – bkdir 2014-09-18 20:13:34

+0

我想要調用這個方法 'def update?(user,record) can_moderate? 結束' – 2014-09-18 20:45:39

回答

0

權威人士initializesrecorduser論證它的政策目標,但隨後調用不帶參數的方法。查看ApplicationPolicy類中的update?方法。這可能不需要爭論。

要解決這個問題,只需將authorize對象和方法作爲符號(:update?)提供。 (記錄和用戶通過getter方法作爲實例變量「傳入」)。

相關問題