首页 > 解决方案 > 编写我的块时遇到问题,语法错误?

问题描述

如果您需要我发布其他信息,我会的!但我相信这只是语法?

不确定它是否错了,但我相信它写的正确。

SyntaxError: /Users/cod3/carbuilds/app/controllers/builds_controller.rb:21: syntax error, unexpected else else ^~~~ /Users/cod3/carbuilds/app/controllers/builds_controller.rb:34: syntax error, unexpected end end ^~~ /Users/cod3/carbuilds/app/controllers/builds_controller.rb:94: syntax error, unexpected end-of-input, expecting end

这是我的块代码,它说我有语法错误,但我认为没关系,

如果我错了,请纠正我

class BuildsController < ApplicationController
    get '/builds' do
        if logged_in?
            @builds = Build.all 
            erb :'builds/index'
        else
            erb :'users/login' #locals: {message: "Unable to Continue please login"}
        end
    end

    get "/builds/new" do
        redirect_if_not_logged_in
        @build = Build.new
        erb :"/builds/new"
      end

    post '/builds' do
        redirect_if_not_logged_in
      if params.values.any? {|value| value == ""}
         erb :'builds/new', #locals: {message: "Unable to Continue!"}
      else
        user = User.find(session[:user_id])
        @build = Build.create(title: params[:title], budget: params[:budget], user_id: params[:user.id])
        redirect to "/builds/#{@build.id}"
      end
    end

    get 'builds/:id' do
        if logged_in?
            @build = Build.find(params[:id])
            erb :'builds/show'
        else
            erb :'users/login', #locals: {message: "Access Denied"}
        end
    end

    get 'builds/:id/edit' do
        if logged_in?
            @build = Build.find(params[:id])
            erb :'builds/edit'
        else
            erb :'users/login' #locals: {message: "Access Denied"}
        end
    end

    patch '/builds/:id' do 
        if params.values.any? {|value| value == ""}
           @build = Build.find(params[:id])
           erb :'builds/edit', locals: {message: "You're missing information"}
           redirect to "/builds/#{params[:id]}/edit"
        else
          @build = Build.find(params[:id])
          @build.title = params[:title]
          @build.budget = params[:budget]
          @build.save
          redirect to "/builds/#{@build.id}"
        end
    end

    delete '/builds/:id/delete' do 
         @build = build.find(params[:id])
        if session[:user_id]
            @build = Build.find(params[:id])
          if @build.user_id == session[:user_id]
             @build.delete
             redirect to '/builds'
          else
             redirect to '/builds'
          end
        else
            redirect to '/login'
        end
    end

    private

    def set_build 
        @build = build.find_by_id(params[:id])
        if @build.nil?
          flash[:error] = "Couldn't find a build with id: #{params[:id]}"
          redirect "/builds"
        end
      end
    
      def redirect_if_not_authorized
        redirect_if_not_logged_in
        if !authorize_build(@build)
          flash[:error] = "You don't have permission to do that action"
          redirect "/builds"
        end
      end
   end
end

这是我的整个 BuildsController 文件。我正在创建一个构建 CAR BUILD 应用程序,它给了我这些语法错误。如果您有时间,我很乐意与您分享这一切,以便您可以看到我在做什么。这是一个大项目,但到目前为止我只关注语法,所以这是一件好事。

标签: rubyactiverecordsinatra

解决方案


  1. 此行中有一个额外的尾随逗号:
erb :'users/login', #locals: {message: "Access Denied"}
#                 ^ here
  1. end您可能在文件末尾有一个太多的关闭s。

您在几个地方有不正确的块缩进。修复它们,完全捕捉/避免这些问题会容易得多。正确设置的编辑器甚至会为您自动进行缩进格式化。

当然,它是“公正”的语法,但语法很重要,因为无效的语法不清楚。计算机不会猜测您的意图是什么,因此这意味着您的代码实际上毫无意义。

例如,数学语法错字使得无法明确解释:

(3 + 2 * 5

该表达可能意味着以下任何一种:

  • (3) + 2 * 5- 可能丢失的)位置
  • (3 + 2) * 5- 可能丢失的)位置
  • (3 + 2 * 5)- 可能丢失的)位置
  • 3 + 2 * 5- 可能额外(

英语中句法不明确导致句子模棱两可(因此实际上毫无意义)的示例:希特勒、脱衣舞娘和牛津逗号


推荐阅读