Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在学习Ruby、Sinatra和从事一个项目时,出现了收益率错误_Ruby_Sinatra - Fatal编程技术网

在学习Ruby、Sinatra和从事一个项目时,出现了收益率错误

在学习Ruby、Sinatra和从事一个项目时,出现了收益率错误,ruby,sinatra,Ruby,Sinatra,在我的项目中,我有几个文件: 1。main.rb require 'sinatra' set :public_folder, 'public' set :views, 'views' set :erb, :layout => :base get '/' do erb :layout end get '/about' do erb :about end get '/contact' do erb :contact end 2。布局.erb require 'sinatra' set :

在我的项目中,我有几个文件: 1。main.rb

require 'sinatra'
set :public_folder, 'public'  
set :views, 'views'
set :erb, :layout => :base
get '/' do
erb :layout
end
get '/about' do
erb :about
end
get '/contact' do
erb :contact
end
2。布局.erb

require 'sinatra'
set :public_folder, 'public'  
set :views, 'views'
set :erb, :layout => :base
get '/' do
erb :layout
end
get '/about' do
erb :about
end
get '/contact' do
erb :contact
end

欢迎来到这个关于伟大的弗兰克·西纳特拉的歌曲的网站


您需要传入一个块

erb :layout
要使
layout.erb
中的
正常工作,您需要传递一个块,该块的输出将放置在'yield'位置。以最简单的形式,您可以执行以下操作:

erb :layout { "This is what I want in output" }
通常,渲染另一个模板:

erb :layout do 
   erb :about
end

更多详情请参见。

TLDR;@wandmaker所说的-您需要将一个块传递给:布局

理解
yield
对于理解Ruby是至关重要的。基本上,
yield
将控制权从一个作用域传递到另一个作用域。Ruby中的所有方法都接受块,但它们会忽略它们,除非它们显式地产生或调用它们:

"A RUBY STRING".downcase { p "I'm in a block!" }
# => "a ruby string"
但如果该方法调用yield,则控制权将传递给块,然后再传递回调用范围:

def yield_me
  yield
end

yield_me { p "I'm in a block!" }
# => "I'm in a block!"
或者,您可以将块捕获为参数:

def catch_me(&block)
  block.call
end

catch_me { p "I'm in a block" }
# => "I'm in a block!"
因此,记住这一点,您的Sinatra模板应该会更清楚地执行什么操作-它呈现layout.erb,但当它点击
yield
,它会尝试将控制权让给一个块-在本例中是一个不存在的块

因此,您的所有回复都应提供一个块或子模板,如:

erb :layout { "<p>This is the about page</p>" }

为什么这个标签是“ruby on rails”?对不起,我错了,我没看到。