我正在尝试识别用户ID号,从ActiveRecord表中获取学生行,但由于某种原因,"post"块将找不到我的:id.
对于'get',url是localhost:9456/update/17.这是我需要传递到'post'块来更新数据库.
我不知道该怎么做.解析URL?好像我错过了一些明显的东西.
# update user page
get '/update/:id' do
@student = Student.find(params[:id]) #this returns ID=17
erb :update
end
#update user submit
post '/update' do
@student = Student.find(params[:id]) #this line doesn't work
@student.name = (params[:name])
@student.email = (params[:email])
@student.save
redirect '/'
end
Run Code Online (Sandbox Code Playgroud)
谢谢!
我必须以错误的方式完成它:打印出的记录是乱序的,即使它们一次插入到db中.这是代码:
get '/' do
db = Mongo::Connection.new("localhost", 27017).db("testdb")
@notes = db.collection('notes')
@notelist = Set.new()
@notes.find().each{|record| @notelist.add(record)}
erb :list
end
post '/addnote' do
db = Mongo::Connection.new("localhost", 27017).db("testdb")
col1 = db.collection('notes')
col1.insert(
{
"guestname" => "#{params[:post][:guestname]}",
"note" => "#{params[:post][:note]}",
"datetime" => Time.now.strftime("%I:%M %p %d-%b-%Y")
})
redirect '/'
end
Run Code Online (Sandbox Code Playgroud)
这是erb模板:
<p><%= @notelist.size() %> notes entered by guests:</p>
<ul>
<% @notelist.each do |record| %>
<li><font color='blue'><%= record['guestname'].to_s() +
"</font> at <i>" + record['datetime'].to_s() +"</i> wrote: " +
record['note'].to_s() %></li>
<% end %>
</ul>
Run Code Online (Sandbox Code Playgroud)
我试图按日期时间顺序从数据库中获取所有记录,我该如何实现? …
我正在使用Sinatra创建一个站点,一切进展顺利,或者直到我需要访问块中的params[]哈希值before.
基本上,我正在尝试这样做:
before do
if params[:forum_id]
@forum = Forum.find(params[:forum_id])
build_breadcrumbs(@forum.parents)
# ... more code, snipped to keep it short
end
end
Run Code Online (Sandbox Code Playgroud)
但问题是,我不能params[]在before块中调用哈希,有没有人有任何想法?
我把这个代码放在before块中的原因是因为我不想把它放在每个页面的每个块get和post块中.
我发现在我的Sinatra应用程序中,当我require 'sinatra',我可以按预期访问我的公共文件夹,但是当我require 'sinatra/base'不能.这是我的相关代码(直到我更改为止/base):
config.ru
root = ::File.dirname(__FILE__)
require ::File.join( root, 'app' )
run MyApp.new
Run Code Online (Sandbox Code Playgroud)
app.rb
require 'sinatra'
require 'sinatra/namespace'
require 'haml'
class MyApp < Sinatra::Application
# ...
end
require_relative 'models/init'
require_relative 'helpers/init'
require_relative 'routes/init'
Run Code Online (Sandbox Code Playgroud)
script.haml
%script(type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js")
%script(type="text/javascript" src="/js/table.js")
%link(rel="stylesheet" type="text/css" href="/css/table.css")
Run Code Online (Sandbox Code Playgroud)
是的,我有正确的目录结构.就像我说的,它有效require sinatra.任何人都知道为什么会发生这种情况以及我能做些什么来解决它?
Ruby有一个代表某段时间的类吗?
IE,1小时,2分钟,3秒.
我意识到有时间类,但构造函数需要一年,一个月和一天.这些都与我正在尝试创建的抽象无关.
注意:与Sinatra合作.
我希望能够在我的网络应用程序中传递特定路线.它是一个很好的尺寸(和不断增长)sinatra应用程序.
是)我有的
get '/' do
haml :Hello_World
end
Run Code Online (Sandbox Code Playgroud)
我想要的是
get '/' do
haml :/specific/path/Hello_World
end
Run Code Online (Sandbox Code Playgroud)
我意识到我可以用更改根目录
set :views, settings.root + '/my/path'
但这确实不是一个更好的选择,因为我需要多个特定路线.
我以前从未使用过Sinatra,也从来没有手动配置过Rspec(总是使用Rails的预写脚本),但是我想尝试一下。
但是我遇到了麻烦,我设法使RSpec可以工作,但是我遇到了错误,只是让它识别Sinatra的方法。
我想知道改用它是否更好Rack::Test。
我当前的问题是atm:
1)rake失败Don't know how to build task 'default'
2)当我使用rspec它失败与undefined method get for #<RSpec::ExampleGroups::MySinatraApplication:0
现在显然我在做错事,但是我不知道该怎么办。我正在跟踪一些发现的问题,但是很好,我只是做得不好。
RakeFile:
require 'rspec/core/rake_task'
RSpec::Core::RakeTask.new do |task|
task.rspec_opts = ['-c', '-f progress', '-r ./spec/spec_helper.rb']
task.pattern = './spec/**/*_spec.rb'
end
Run Code Online (Sandbox Code Playgroud)
spec_helper.rb
require 'rspec'
require 'rack/test'
RSpec.configure do |conf|
conf.include Rack::Test::Methods
end
Run Code Online (Sandbox Code Playgroud)
app_spec.rb
ENV['RACK_ENV'] = 'test'
require '../../myapp'
require 'rspec'
require 'rack/test'
describe 'My Sinatra Application' do
include Rack::Test::Methods
def app
Sinatra::Application
end
it "says hello" do
get '/' …Run Code Online (Sandbox Code Playgroud) 当服务器上出现错误(例如IOError或ArgumentError)时,我试图使sinatra应用程序显示自定义错误页面。
当前,我正在使用AJAX将结果加载到某个#resultsdiv中,但是如果并且在服务器上出现错误时,我希望在新页面上打开错误页面。
当前,服务器上显示IOError并在控制台中看到错误(服务器响应状态为500(内部服务器错误))。除此之外,什么也没有发生。
我认为我必须使用Javascript(以及Sinatra :: Base类),但是我花了整个整个昨天和今天的早晨。
我将非常感谢您的帮助。我为应用创建了一个过于简化的版本,如下所示...
Sinatra_app.rb
require 'sinatra/base'
require9 'sinatra'
require 'slim'
# A helper module
module GVhelpers
def create_results(name)
# raise IOError, "There's a problem..."
return "<p>The Server Says 'Hey #{name}'</p>"
end
end
class GVapp < Sinatra::Base
helpers GVhelpers
set :root, File.dirname(__FILE__)
error do
@error = env['sinatra.error']
slim :"500", :locals => {:error => error}
end
get '/' do
slim :index
end
post '/form' do
name = params[:personName]
create_results(name)
end
end
GVapp.run!
Run Code Online (Sandbox Code Playgroud)
index.slim(在views文件夹中)
script src="/jquery.min.js" …Run Code Online (Sandbox Code Playgroud) 我很好奇地看到如何从n到kth获得记录.我不知道我是否错过了,但是通过文档并没有对我有利.
我不是说我想要记录,其中id介于5 - 10之间,但记录介于5 - 10之间.如何进行此操作?
当我尝试开始潇洒时,我收到以下错误:
scheduler caught exception:
uninitialized constant Nokogiri
/Users/Adam/projects/ticker/jobs/sample.rb:2:in `block in <top (required)>'
Run Code Online (Sandbox Code Playgroud)
我的Gemfile是:
source 'https://rubygems.org'
gem 'nokogiri'
gem 'dashing'
Run Code Online (Sandbox Code Playgroud)
我的jobs文件夹包含一个文件夹sample.rb:
SCHEDULER.every '2s' do
oil_doc = Nokogiri::HTML(open("http://www.bloomberg.com/energy/"))
a = oil_doc.css("table.std_table_module").first
price = a.xpath("//td[3]").first.children.text
send_event('valuation', { current: price })
end
Run Code Online (Sandbox Code Playgroud)
我已经尝试添加 require 'open-uri'到Gemfile和sample.rb但它没有帮助!