08/12/26

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()

你可能感兴趣的:(JavaScript,sql,C#,Ruby,Rails)