1、Table1.find(:all,:conditions=>[sql,params],:include=>[table2,table3]
其中在include内的表table2,table3都会与表table1进行左连接;而且要使得以上语句能够正确运行,table2,table3必须与table1有类似belongs_to,has_many的关联;
以上rails中的代码也可以直接用sql语句生成,例如要找跟id为1的项目有关的公司名称、联系人的姓和名,其关联表为:project_firm,则rails中的代码为:
ProjectFirm.find(:all,:conditions=>"project_id = 1",:include=>[:firms,:contacts,:projects])
(注:以上语句不仅会把公司名称、联系人的姓名搜索进来,也会把这些表所拥有的属性全部搜索进来,要将字段简化可直接用sql语句)
直接写sql代码为:
select p.name as p_name,a.name as a_name,c.last_name as l_name,c.first_name as f_name
from project_firms as pf
left join projects as p on pf.project_id = p.id
left join accounts as a on pf.firm_id = a.id
left join contacts as c on pf.firm_contact_id=c.id
在包含prototype.js的javascript中实现像ruby那样
1、单个数字的迭代
ruby代码:
5.times{|i| puts i}
javascript实现:
(5).times(function(n){
puts i
})
其中5必须在括号内,否则会出错;另外,function(n)有点类似ruby代码中的|i|;
2、区间迭代
ruby代码
(1..5).each{|i| puts i}
javascript实现:
$R(1,5).each(function(n){
puts i
})
3、方法
ruby代码:
str=['a','b','c']
str1=str.clone
n=str.size
javascript实现:
str=['a','b','c']
str1=str.clone()
n=str.size()
其中clone和size后的括号是必须的;
4、类似map的方法——invoke,功能很好,很强大
['hello','world','good'].invoke('toUpperCase') => ['HELLO','WORLD','GOOD']
['hello','world','good'].invoke('substring',0,3) =>['hel','wor','goo']
也可以控制元素的属性和css样式,如:
$('test1','test2','test3').invoke('toggle'):使得id为test1,test2,test3元素的display属性在inline和none间转换;
$('test1','test2','test3').invoke('addClassName','show'):为每个元素添加class="show";
5、prototype.js中的扩展
一般的用法为:Element.methods,例如:
Element.hide('my_div');
Element.addClassName('my_div','style_name')
可利用扩展:
my_div = document.createElement('div')
Element.extend(my_div);
my_div.hide();
my_div.addClassName('style_name')(或可直接写为:my_div.addClassName('style_name').hide();)
document.body.appendChild(my_div)
也就是说,在进行扩展后,元素将拥有Element类的方法;其中,常用的美元符$('my_div'),也就是对美元符进行了扩展;同理$$('my_style')也是;
另外还可以用Element.addMethods()方法为元素添加自己所写的方法,例如:
var myMethod={
truncate:function(element,length){
element = $(element);
return element.update(element.innerHTML.truncate(lenght));
},
updateAndMark:function(element,html){
return $(element).update(html).addClassName('update');
}
}
在利用:Element.addMethods(myMethod)进行扩展后,便可使用以下方法:
$('my_div').truncate(100)
需要注意的是:当扩展涉及到上级节点时,在不同的浏览器中需进行如同的处理,例如在IE中以下语句会报错:
$('someElement').parentNode.hide()
若要使得在所有的浏览器中都兼容,则需改为:
$($('someElement').parentNode).hide()
其中在include内的表table2,table3都会与表table1进行左连接;而且要使得以上语句能够正确运行,table2,table3必须与table1有类似belongs_to,has_many的关联;
以上rails中的代码也可以直接用sql语句生成,例如要找跟id为1的项目有关的公司名称、联系人的姓和名,其关联表为:project_firm,则rails中的代码为:
ProjectFirm.find(:all,:conditions=>"project_id = 1",:include=>[:firms,:contacts,:projects])
(注:以上语句不仅会把公司名称、联系人的姓名搜索进来,也会把这些表所拥有的属性全部搜索进来,要将字段简化可直接用sql语句)
直接写sql代码为:
select p.name as p_name,a.name as a_name,c.last_name as l_name,c.first_name as f_name
from project_firms as pf
left join projects as p on pf.project_id = p.id
left join accounts as a on pf.firm_id = a.id
left join contacts as c on pf.firm_contact_id=c.id
在包含prototype.js的javascript中实现像ruby那样
1、单个数字的迭代
ruby代码:
5.times{|i| puts i}
javascript实现:
(5).times(function(n){
puts i
})
其中5必须在括号内,否则会出错;另外,function(n)有点类似ruby代码中的|i|;
2、区间迭代
ruby代码
(1..5).each{|i| puts i}
javascript实现:
$R(1,5).each(function(n){
puts i
})
3、方法
ruby代码:
str=['a','b','c']
str1=str.clone
n=str.size
javascript实现:
str=['a','b','c']
str1=str.clone()
n=str.size()
其中clone和size后的括号是必须的;
4、类似map的方法——invoke,功能很好,很强大
['hello','world','good'].invoke('toUpperCase') => ['HELLO','WORLD','GOOD']
['hello','world','good'].invoke('substring',0,3) =>['hel','wor','goo']
也可以控制元素的属性和css样式,如:
$('test1','test2','test3').invoke('toggle'):使得id为test1,test2,test3元素的display属性在inline和none间转换;
$('test1','test2','test3').invoke('addClassName','show'):为每个元素添加class="show";
5、prototype.js中的扩展
一般的用法为:Element.methods,例如:
Element.hide('my_div');
Element.addClassName('my_div','style_name')
可利用扩展:
my_div = document.createElement('div')
Element.extend(my_div);
my_div.hide();
my_div.addClassName('style_name')(或可直接写为:my_div.addClassName('style_name').hide();)
document.body.appendChild(my_div)
也就是说,在进行扩展后,元素将拥有Element类的方法;其中,常用的美元符$('my_div'),也就是对美元符进行了扩展;同理$$('my_style')也是;
另外还可以用Element.addMethods()方法为元素添加自己所写的方法,例如:
var myMethod={
truncate:function(element,length){
element = $(element);
return element.update(element.innerHTML.truncate(lenght));
},
updateAndMark:function(element,html){
return $(element).update(html).addClassName('update');
}
}
在利用:Element.addMethods(myMethod)进行扩展后,便可使用以下方法:
$('my_div').truncate(100)
需要注意的是:当扩展涉及到上级节点时,在不同的浏览器中需进行如同的处理,例如在IE中以下语句会报错:
$('someElement').parentNode.hide()
若要使得在所有的浏览器中都兼容,则需改为:
$($('someElement').parentNode).hide()