我正在编写一个简单的ruby控制器,只需要作为Web服务响应一堆移动客户端.
有人告诉我,我应该看看Sinatra.将Sinatra用于这么简单的事情有什么意义?他提到它会"更快"但是如何在某些东西之上使包装更快?
我不想让事情过于复杂; 一个简单的控制器很容易编写,维护的宝石也少.我错过了Sinatra提供的东西,这值得额外的麻烦吗?
谢谢
%a{:href => "/new_game?human_is_first=true", :remote => "true"}
%span Yes
Run Code Online (Sandbox Code Playgroud)
以上是我的链接.只是想知道如何处理这个问题.我需要能够执行一些JavaScript.下面是我使用rails时的.js.erb文件.
$('.welcome_container').fadeOut(500, function(){
$( '.shell' ).html( "<%= escape_javascript( render( :partial => "board/board" ) ) %>" );
$('.board_container').fadeIn(500);
});
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是,在app.rb中调用Once/new_game,我希望能够将一些javascript发送到当前页面(不离开页面,并进行部分渲染)
有人可以向我解释这里发生了什么吗?
这是一个我放在一起展示你们最新情况的例子:
class Person
include DataMapper::Resource
property :id, Serial
property :type, Discriminator
property :name, String
property :age, Integer
end
class Male < Person
end
class Father < Male
property :job, String
end
class Son < Male
end
class Female < Person
end
class Mother < Female
property :favorite_song, String
end
class Daughter < Female
end
DataMapper.auto_upgrade!
Run Code Online (Sandbox Code Playgroud)
如果我打电话给Person.all我:
Person.all
=> [#<Son @id=1 @type=Son @name="Mike" @age=23 @status=nil>,
#<Son @id=2 @type=Son @name="Carlos" @age=12 @status=nil>,
#<Father @id=3 @type=Father @name="Robert" @age=55 @job=<not loaded>>, …Run Code Online (Sandbox Code Playgroud) 这是我的表格:
<form action="/results" method="post" name="checkbox_form">
<input type="checkbox" name="item" value="Bacon">Bacon (1 lb., sliced)<br>
<input type="checkbox" name="item" value="Eggs (dozen)">Eggs (1 dozen)
<input type="submit" value="Calculate">
</form>
Run Code Online (Sandbox Code Playgroud)
如果用户选中"培根"和"鸡蛋(1打)"框,我如何使用Sinatra和/或Sequel返回此数组:
["Bacon","Eggs (dozen)"]
Run Code Online (Sandbox Code Playgroud)
如您所见,数组元素是表单的"值"元素.
作为一个侧面问题:Sinatra如何处理复选框表格?我在Sinatra手册中找不到任何好的信息.
我在Sinatra 1.3.3应用程序中成功使用ActiveRecord 3.2.9.我希望能够使用ActiveRecord :: Observer类,但我不确定如何激活它们.
ActiveRecord :: Observer 文档特定于Rails有关此特定位:
要激活观察者,请在config/application.rb文件的config.active_record.observers配置设置中列出它.
当然,我没有设置此设置的"config"对象.有任何想法吗?
编辑
我尝试像这样激活观察者:
ActiveRecord::Base.observers = [ :thermometer_reading_observer ]
Run Code Online (Sandbox Code Playgroud)
这样做,因为它们设置正确,但它们仍然没有做任何事情:
[4] pry(main)> ActiveRecord::Base.observers
=> [:thermometer_reading_observer]
Run Code Online (Sandbox Code Playgroud) 我正在使用一个API,其中返回的日期类似于:2012-11-30 12:54:59 -0800.我想知道是否有一个Ruby方法可以将其作为输入并返回"今天",例如.
其他首选输出将是"大约一小时前","刚刚","一个月前".
我正在使用Sinatra.
我目前正在使用带有Heroku的Sinatra,唯一的同步是数据库.因此,我需要存储在数据库中的会话(希望不使用ActiveRecord).
是否有Rack中间件或其他类似的东西?
好吧,这是非常奇怪的(对我而言),我的主分支中的一切工作正常,然后我创建了一个名为twitter的新分支来进行一些twitter feed实现.我已经完成了这个并且昨天在我的linux机器上工作..我今天在Windows环境中拉动了分支但是当我加载应用程序时我现在得到常规的Sinatra 404 Sinatra不知道这个小曲.
这是我的profile.rb文件
require 'bundler/setup'
Bundler.require(:default)
require 'rubygems'
require 'sinatra'
require './config/config.rb' if File.exists?('./config/config.rb')
require 'sinatra/jsonp'
require 'twitter'
require 'sinatra/static_assets'
class Profile < Sinatra::Base
helpers Sinatra::Jsonp
enable :json_pretty
register Sinatra::StaticAssets
@@twitter_client = Twitter::Client.new(
:consumer_key => ENV["CONSUMER_KEY"],
:consumer_secret => ENV["CONSUMER_SECRET"],
:oauth_token => ENV["OAUTH_TOKEN"],
:oauth_token_secret => ENV["OAUTH_SECRET"],
)
get '/' do
erb :index
end
get '/feed' do
jsonp @@twitter_client.user_timeline('richl14').map(&:attrs)
end
end
Run Code Online (Sandbox Code Playgroud)
Config.ru
require './profile'
run Profile
Run Code Online (Sandbox Code Playgroud)
有没有人对我需要解决的问题有任何想法?任何人都可以从中获得经验吗?
谢谢
我已经能够将所有内容类型设置为before块中的JSON ,但是在过滤器之后是否有一个sinatra允许我在所有响应上运行to_json(而不是to_json在下面的示例中写入3次)?
require 'sinatra'
require 'json'
before do
content_type :json
end
get '/' do
{ song: "Hello" }.to_json
end
get '/go' do
{ song: "Go Yo Ho" }.to_json
end
get '/hi' do
{ song: "Wake me Up" }.to_json
end
Run Code Online (Sandbox Code Playgroud)
谢谢!
我正在尝试使用带有ActiveRecord的Sinatra的更简单的设置,我遇到了一些令人费解的问题,并且会喜欢另一组眼睛.我将提供所有相关文件:
database.yml的:
development:
adapter: sqlite3
database: db/development.sqlite3
test:
adapter: sqlite3
database: db/test.sqlite3
production:
url: <%= ENV['DATABASE_URL'] %>
Run Code Online (Sandbox Code Playgroud)
Rake文件:
require_relative "demo_app"
require 'sinatra/activerecord/rake'
require 'rake/testtask'
Rake::TestTask.new do |t|
t.pattern = "test/*_test.rb"
end
Run Code Online (Sandbox Code Playgroud)
test_helper.rb中:
ENV['RACK_ENV'] = 'test'
ENV["SINATRA_ENV"] = "test"
require_relative '../demo_app'
require 'minitest/autorun'
require 'rack/test'
ActiveRecord::Migration.maintain_test_schema!
Run Code Online (Sandbox Code Playgroud)
迁移文件:
class CreatePeople < ActiveRecord::Migration
def change
create_table :people do |t|
t.string :name
t.date :dob
t.string :gender
t.string :gender
t.integer :zipcode
end
end
end
Run Code Online (Sandbox Code Playgroud)
现在,我想对测试数据库运行测试.当我尝试做的时候
rake db:create RAILS_ENV=test - 它创建了一个development.sqlite3
rake db:migrate RAILS_ENV=test - 相同+运行迁移 …