我希望能够做到以下几点:
get '/:slug' do
haml :page
end
get '/administration' do
haml :admin
end
Run Code Online (Sandbox Code Playgroud)
有没有办法可以get '/:slug' do让/管理有例外?我意识到你可以使用if else语句来做到这一点:
get '/:slug' do
if params[:slug] == 'administration'
haml :admin
else
haml :page
end
end
Run Code Online (Sandbox Code Playgroud)
但那看起来不是很干净.有没有办法让路线有例外?
application.html.erb是一个应用于rails中所有视图的文件.在某种程度上,它的主文件,所有子文件之后的样式/结构.
我如何在Sinatra中使用它?
我正在使用Ruby和Sinatra开发一个应用程序.
我用
enable :sessions
Run Code Online (Sandbox Code Playgroud)
为了使用rack提供的会话变量.如何使所有会话cookie成为HTTPOnly?这是默认的吗?我找不到任何关于此的文件.
将Datamapper与Sinatra一起使用,保存文本属性非常简单:
DataMapper::setup(:default, "sqlite3://#{Dir.pwd}/tailor.db")
class Person
include DataMapper::Resource
property :id, Serial
property :name, String, :required => true
property :height, String, :required => false
end
DataMapper.finalize.auto_upgrade!
...
put '/:id/edit' do
p = Person.get params[:id]
p.name = params[:name]
p.height = params[:height]
p.save
end
Run Code Online (Sandbox Code Playgroud)
并且观点:
%form
%input{:type => 'text', :name => 'name'}
%input{:type => 'text', :name => 'height'}
%input{:type => 'submit', :value => 'Save'}
Run Code Online (Sandbox Code Playgroud)
随着:type => 'text'它是一件轻而易举的事.但是,我在尝试property :test, Boolean, :required => false使用复选框设置boolean()时遇到了麻烦.这个问题类似,但没有解决如何做一个简单的布尔值.
另外,设置不接受任何字符串的值的最简单方法是什么,而只是一组预定义的选项 - 作为允许一个选择的选择,还是允许多个选项的一组单选按钮?
编辑:
我想出了复选框:
p.bool …Run Code Online (Sandbox Code Playgroud) RSpec(2.12.2)让我很难过.如果我想在我的一个规范中引用一个类,并且该类不在我的/lib目录的根目录中,则会抛出一个错误:
no such file to load -- test (LoadError)
Run Code Online (Sandbox Code Playgroud)
似乎我的规范可以嵌套在文件夹结构中,但是当我尝试并且需要一个嵌套文件夹中的类时(例如lib/workers/conversion_worker.rb),我得到了这个错误.
我在所有规范中都使用了'spec_helper',但即使对类路径进行硬编码也会导致同样的错误.
有了这个结构:
-lib/
- class_found.rb
- workers/
- class_not_found.rb
Run Code Online (Sandbox Code Playgroud)
规范看起来像这样:
# spec/workers/class_not_found_spec.rb
require "spec_helper"
require "class_not_found"
describe ClassNotFound do
it "Does something"
end
Run Code Online (Sandbox Code Playgroud)
以下命令成功运行规范(-I标志添加$ LOAD_PATH的路径):
$ rspec spec/workers/class_not_found_spec.rb -I /Path/to/project/*
Run Code Online (Sandbox Code Playgroud)
因此,似乎RSpec没有在其路径下添加lib以下的任何内容.
我可以使用require_relative成功地要求class_not_found.rb:
require_relative "../../lib/workers/class_not_found.rb" #Succeeds
Run Code Online (Sandbox Code Playgroud)
但不使用require:
require "lib/workers/class_not_found.rb" # Fails
Run Code Online (Sandbox Code Playgroud) 我试图在成功提交表格后出现闪光通知.在Rails中我会在控制器中使用这样的东西:
:notice => "Youve submitted the form"
Run Code Online (Sandbox Code Playgroud)
我遇到了Sinatra flash gem,想在重定向后显示flash消息.我像这样安装了gem和setup:
myapp.rb:
require 'sinatra/flash'
enable :sessions
#form config
)}
redirect '/success' # this is the hook after my form submission
end
get('/success') do
flash[:success] = "Thanks for your email. I'll be in touch soon."
erb :index
end
Run Code Online (Sandbox Code Playgroud)
所有这一切都是我被重定向到没有flash消息的索引页面.看看文档,这是我能看到的,我需要做的.有人看到有什么不同吗?
在我的Flask应用程序中,我想公开一个这样的URI:
http://<base_uri>/some_string
我希望以不同的方式处理对它的请求,具体取决于是否some_string为整数.
使用Sinatra,我可以通过" 传递 " 来实现,如下所示:
get '/:some_string' do
if is_integer(:some_string)
'Your URI contains an integer'
else
pass # This will pass the request on the the method below which can handle it
end
get '/*' do
'Your URI contains some string'
end
Run Code Online (Sandbox Code Playgroud)
这里pass第一个路由中的调用允许第二个路由处理请求(如果:some_string不是整数).
我在Flask中找不到任何等效的功能.有人可以在Flask中推荐一个解决方案吗?
我有一个基于Sinatra的服务器,它为我正在处理的服务提供RESTful API.在我的开发机器上运行localhost:9393.
同时,用于用户身份验证的客户端应用程序(内置ember.js)ember-auth在另一个端口上运行:localhost:9000.
以前我在同一主机上设置服务器和客户端:端口和返回的客户端应用程序作为静态文件.身份验证工作得很好.根据SignIn 的官方文档,我在我提供的路线(/signin)上获得了POST请求.但现在我接受OPTIONS请求,没有任何参数.
来自客户端的一些代码(客户端是通过Yeoman的ember-generator生成的):
的index.html
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="" />
<meta name="author" content="" />
<title>Ember Starter Kit</title>
<!-- build:css styles/main.css -->
<link rel="stylesheet" href="styles/normalize.css">
<link rel="stylesheet" href="styles/bootstrap.css">
<link rel="stylesheet" href="styles/bootstrap-responsive.css">
<link rel="stylesheet" href="styles/style.css">
<!-- endbuild -->
</head>
<body>
<!-- build:js scripts/components.js -->
<script src="components/jquery/jquery.js"></script>
<script src="components/handlebars/handlebars.runtime.js"></script>
<script src="components/ember/ember.js"></script>
<script src="components/ember-data/ember-data-latest.js"></script>
<script src="components/ember-auth/ember-auth.js"></script>
<!-- endbuild …Run Code Online (Sandbox Code Playgroud) 我有一个使用haml的ruby sinatra应用程序.我将layout.haml用于所有页面的公共菜单.假设我有login.haml,main.haml和reports.haml.我只想将layout.haml用于login.haml和main.haml.如何从reports.haml中排除layout.haml?谢谢
我想链接到Sinatra设置的默认公共目录之外的CSS和JavaScript文件.
我知道我可以set :public用来更改目录,但我想保留默认目录和其他'public_2'.
有没有办法做到这一点?