【问题标题】:Having issues writing my block, SYNTAX ERROR?编写我的块时遇到问题,语法错误?
【发布时间】:2020-12-31 02:16:43
【问题描述】:

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

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

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 应用程序,它给了我这些语法错误。如果您有时间,我很乐意与您分享这一切,以便您可以看到我在做什么。这是一个大项目,但到目前为止,我只关注语法,所以这是一件好事。

【问题讨论】:

    标签: ruby activerecord sinatra


    【解决方案1】:
    1. 此行中有一个额外的尾随逗号:
    erb :'users/login', #locals: {message: "Access Denied"}
    #                 ^ here
    
    1. 文件末尾的关闭ends 可能太多了。

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

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

    例如,数学语法错误导致无法明确解释:

    (3 + 2 * 5
    

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

    • (3) + 2 * 5 - 可能缺少) 位置
    • (3 + 2) * 5 - 可能缺少) 位置
    • (3 + 2 * 5) - 可能缺少) 位置
    • 3 + 2 * 5 - 可能额外 (

    英语中句法不明确导致句子模棱两可(因此实际上毫无意义)的示例:

    【讨论】:

    • 感谢您的回答和支持!喜欢图片参考!
    • 另一个正确放置逗号很重要的例子:“我们吃饭吧,爷爷!” vs. “我们吃爷爷吧!”
    猜你喜欢
    • 2010-12-27
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多