我得到一个包含var express = require('express');
var app = express();
var r = require('rethinkdb');
var bodyParser = require('body-parser');
var session = require('express-session');
var bcrypt = require('bcryptjs');
function dbConnect(){
var connection = null;
r.connect({host: 'localhost', port: 28015}, function(err, conn){
if (err){
throw err;
}else{
connection = conn;
console.log("Connected to Rethink");
}
});
}
dbConnect();
app.use(bodyParser.urlencoded({
extended: true
}));
app.use(bodyParser.json());
app.use(session({secret: 'gitTy Up!',resave: false,saveUninitialized:true}));
app.use(require('connect-flash')());
app.set('view engine','ejs');
//Home Page
app.get('/', function (req, res) {
res.render('home');
})
app.get('/join', function (req, res) {
res.render('join');
})
app.post('/join',function(req, res){
var salt = bcrypt.genSaltSync(10);
r.table('users').insert([{email: req.body.email, password: bcrypt.hashSync(req.body.password, salt)}])
.run(connection, function(err,result) {
if (err) throw err;
console.log(JSON.stringify(result, null, 2));
})
});
app.listen(3000);
个对象的数组。 person
可以包含多个person
:
houses
有些房屋可能属于多个 person.houses => ActiveRecord_Associations_CollectionProxy
。在我的代码中,我想为数组中的人员获取所有唯一的persons
。
这是代码的长版本:
houses
您知道这个 def persons_houses(persons)
unique_houses = []
persons.each do |person|
person.houses.each do |house|
unique_houses << house if !unique_houses.include? house
end
end
unique_houses
end
方法的代码较短吗?
我正在考虑绘制人物房屋,同时连接它们然后返回唯一值
类似的东西:(但这不是有效的Ruby)
persons_houses(persons)
感谢您的帮助!
答案 0 :(得分:1)
每个人都有很多房子,一个房子可能属于很多人?怎么样:
persons.map(&:houses).flatten.uniq
答案 1 :(得分:0)
您可以使用单个数据库查询执行此操作,而无需解析数组。假设你有一个关系表(不确定一个人怎么可以有很多房子,一个房子可以有很多人),并假设你的关系表被称为ownerships
,你会这样做:
House.joins(:ownerships).where(ownerships: {person_id: persons.ids}).uniq
这比其他建议的答案要快得多,内存效率也高得多,而且它还为您提供了ActiveRecord_Relation,因此您可以进一步确定结果的范围。