mkristgan的rack_datamapper gem说它"可以被包装用于特定的环境,即Rack :: Session :: Datamapper".
不幸的是,我还不太了解Ruby来完成这项任务 - Ruby中的模块/类仍然在我的头上(来自PHP).
任何人都可以使用rack_datamapper来实现Rack :: Session :: Datamapper吗?
你可能不想这样做.
下面的答案很好,但经过仔细考虑,我意识到我不应该这样做.相反,我将user_id,ip和名字(为方便起见)放在cookie中并保护它.
所以我要说我有一个类如下
class List
include DataMapper::Resource
property :id, Serial
property :username, String
def self.my_username
return self[:username]
end
end
list=List.create(:username=>,'jim')
list.my_username
Run Code Online (Sandbox Code Playgroud)
当我运行它时,它告诉我无法找到该方法,并且在更多的调查中,您只能定义类方法(而不是对象方法),并且该类方法无法访问对象数据.
有没有办法将这些方法作为对象方法包含在内并获取对象数据的访问权限?我正在使用Ruby 1.8.6和最新版本的datamapper.
我在这里做了一个概念验证的事情,并且遇到了比我想象的更多的麻烦.这是我想要做的以及我目前是如何做的.
我发送我的Sinatra应用程序一个json文件,其中包含下面的简单消息.
[
{
title: "A greeting!",
message: "Hello from the Chairman of the Board"
}
]
Run Code Online (Sandbox Code Playgroud)
从那里我有一个帖子,我用它来获取参数并将它们写入sqlite数据库
post '/note' do
data = JSON.parse(params) #<---EDIT - added, now gives error.
@note = Note.new :title => params[:title],
:message => params[:message],
:timestamp => (params[:timestamp] || Time.now)
@note.save
end
Run Code Online (Sandbox Code Playgroud)
当我发送消息时,时间戳和id被保存到数据库,但标题和消息是零.
我错过了什么?
谢谢
编辑:
现在,当我运行我的应用程序并将其发送给json文件时,我收到此错误:
C:/Users/Norm/ruby/Ruby192/lib/ruby/1.9.1/webrick/server.rb:183:在'block in start_thread'中TypeError:无法将Hash转换为String
编辑2:取得了一些成功.
我在文件调用test.json中有上面的json,这是json的发布方式.为了发布我使用HTTPClient的文件:
require 'httpclient'
HTTPClient.post 'http://localhost:4567/note', [ :file => File.new('.\test.json') ]
Run Code Online (Sandbox Code Playgroud)
在考虑了一些之后,我认为发布文件是问题所以我尝试以不同的方式发送它.下面的示例一旦我将我的帖子/注释句柄更改为:
data = JSON.parse(request.body.read)
Run Code Online (Sandbox Code Playgroud)
我的新send.rb
require 'net/http'
require 'rubygems'
require 'json'
@host = 'localhost'
@port …Run Code Online (Sandbox Code Playgroud) 我正在阅读zend Framework快速入门:
Mapper类中有一个函数:
public function save(Application_Model_Guestbook $guestbook)
{
$data = array(
'email' => $guestbook->getEmail(),
'comment' => $guestbook->getComment(),
'created' => date('Y-m-d H:i:s'),
);
if (null === ($id = $guestbook->getId())) {
unset($data['id']);
$this->getDbTable()->insert($data);
} else {
$this->getDbTable()->update($data, array('id = ?' => $id));
}
}
Run Code Online (Sandbox Code Playgroud)
我不明白将类名作为参数的含义或相关性,也不知道php5中是如何允许的,因为php.net手册中没有引用.
有没有办法使用DataMapper获取模型的属性?例如:
require 'rubygems'
require 'datamapper'
class User
include DataMapper::Resource
property :id, Serial
property :name, String
end
Run Code Online (Sandbox Code Playgroud)
我可以获取User数组或哈希的属性吗?
我对Ruby和后端开发一般都是新手.话虽这么说,我正在尝试创建一个简单的搜索表单.我使用Sinatra作为框架,使用Datamapper作为我的ORM.做这个的最好方式是什么?下面是我的架构我希望搜索操作同时搜索磁贴和类别.
require 'sinatra'
require 'datamapper'
DataMapper.setup(:default, "sqlite3://#{Dir.pwd}/cal.db")
class Event
include DataMapper::Resource
property :id, Serial
property :title, String
property :text, Text
property :contact_name, String
property :contact_email, String
property :location, String
property :event_start_time, String
property :event_end_time, String
property :category, String
property :created_at, DateTime
property :approved, Boolean, :default => false
end
DataMapper.auto_upgrade!
post '/search' do
@results = Event.all
erb :layout
end
Run Code Online (Sandbox Code Playgroud)
============ layout.erb
<form action="/search" method="post">
<input type="text" name="query"/><br />
<input type="submit" />
</form>
<% if @results %>
<table>
<%@results.each do |r|%>
<tr …Run Code Online (Sandbox Code Playgroud) RSpec总是坚持使用基于xUnit的测试框架,但我有点迷失了,但我还是试着去了.
编写规范的方式的嵌套特性给我带来了一些令人头疼的关于我应该在哪里进行数据库设置/拆解.
根据DatabaseCleaner自述文件:
Spec::Runner.configure do |config|
config.before(:suite) do
DatabaseCleaner.strategy = :transaction
DatabaseCleaner.clean_with(:truncation)
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
end
Run Code Online (Sandbox Code Playgroud)
现在我不能使用事务,因为我在我的代码中使用它们,所以我只是坚持截断,但那不应该在这里或那里.
我有这个:
RSpec.configure do |config|
config.mock_with :rspec
config.before(:suite) do
DatabaseCleaner.strategy = :truncation
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
end
Run Code Online (Sandbox Code Playgroud)
这里的问题是,当我尝试在后续或块中使用它时,我在一个subject或let块中创建的任何装置已经消失(从数据库中).describeit
例如(使用Machinist创建灯具......但这不应该相关):
describe User do
describe "finding with login credentials" do
let(:user) { User.make(:username => "test", :password => "password") }
subject { User.get_by_login_credentials!("test", "password") }
it { should …Run Code Online (Sandbox Code Playgroud) 如果我有一个相当复杂的用户模型,我想使用数据映射模式加载,我怎么会懒得加载一些更密集的用户信息,而不允许用户知道UserMapper?
例如 - 如果User模型允许Address对象数组(并且用户可能有很多,但不一定需要预先),如果/需要时如何加载这些对象?
我是否让User模型知道AddressMapper?
我是否将用户模型BACK传递给UserMapper,然后只对地址进行水合?
有更好的选择吗?
我在 Rails 3.2.11 应用程序中使用 Rspec。我已经安装并设置了 spork。\n我使用 datamapper 作为 ORM。
\n\n然而,当 spork 运行时,运行一个测试需要一分钟多的时间。\n即使正在运行的测试是空的。肯定有什么问题。但我无法弄清楚到底是什么。
\n\n我的 test_spec 是这样的:
\n\nrequire "spec_helper"\nrequire "cancan/matchers"\n\ndescribe User do\nend\nRun Code Online (Sandbox Code Playgroud)\n\n我的规范帮助文件可以在这里找到:https://gist.github.com/4593609
\n\n当我计时 rspec 时:
\n\n\xe2\x9e\x9c books git:(dev) \xe2\x9c\x97 time rspec --drb spec/models/test_spec.rb\nNo examples found.\n\n\nFinished in 1 minute 51.08 seconds\n0 examples, 0 failures\nrspec --drb spec/models/test_spec.rb 1.49s user 0.04s system 1% cpu 1:52.94 total\nRun Code Online (Sandbox Code Playgroud)\n\nSpork日志:
\n\n\xe2\x9e\x9c books git:(dev) \xe2\x9c\x97 spork\nUsing RSpec\nPreloading Rails environment\nLoading Spork.prefork block...\nRack::File headers parameter replaces cache_control after Rack 1.5.\nSpork is …Run Code Online (Sandbox Code Playgroud) Mapper.CreateMap<DataViewModel, DataSource>()
Run Code Online (Sandbox Code Playgroud)
我的源代码包含来自用户界面的字符串值。我想在将所有字符串映射到目标对象之前修剪所有字符串。无法为此找到解决方案。任何人都知道这是如何做到的
datamapper ×10
ruby ×7
sinatra ×3
php ×2
asp.net-mvc ×1
automapper ×1
database ×1
json ×1
lazy-loading ×1
orm ×1
rack ×1
rspec ×1
rspec-rails ×1
search ×1
session ×1
tdd ×1