生成报表结果(使用Gruff Graph做的)
呵呵,rails还是很好玩的。这个软件虽然很简单,但是已经能代替很多Excel功能了,而且可以多人协作。继续努力。
keys: ruby rails multiple checkbox
今天上班给老板写个项目销售管理的小东西,其中涉及到多重选择的处理。目前感觉rails在这方面相对弱,也许因为rails在其它方面太强了吧。总之,对于用rails处理multiple checkbox,还真需要些基础知识。
例子中的任务是为一个项目project指定人员user_file,这显然是一个N对N(HABTM)的关联,按照David的建议,我把关联表project_user_map也作为实体处理了。
介绍一下模型 model:
class Project …
has_many :project_user_maps
end
class ProjectUserMap
belongs_to :project
belongs_to :user_file
end
class UserFile
has_many :project_user_maps
end
先说view:
<% form_tag :action => ‘edit_member_2’, :id => @project do %>
<% for user_file in @all%>
<%= check_box_tag( ‘selected_file_ids[]’, user_file.id, @members.include?(user_file))%><%= user_file.name%>
<% end %>
<br/>
<%= submit_tag ‘完成!’ %>
<% end %>
要点是selected_file_ids[],这样提交以后,rails会生成一个对应的数组。@all是全部可选项;@members是被选中的选项。
然后是controller:
def edit_member_2
@project = Project.find(params[:id])
member_ids = params[:selected_file_ids]
ProjectUserMap.transaction do
@project.project_user_maps.each { |pum|
pum.destroy
}
member_ids.each {|uf|
m = ProjectUserMap.new
m.user_file_id = uf
@project.project_user_maps << m
m.save()
}
@project.save
end
redirect_to :action => ‘show’, :id => @project
end
这段只能说运行没问题,肯定还有改进余地的:) 参考1
RegEx中文叫做正则表达式,虽然不是很新的东西了,我很纳闷我居然是才开始了解它。在数据库中查询keyword一般是写成
select * from tablename where columnname LIKE ‘%keyword%’
而java我记得不是很清楚了,大概是
if(myString.indexOf(keyword) != -1){
//do things…
}
这个只是简单匹配,如果有复杂要求就要写多得多的代码了。例如判断keyword是否是一个数字开头,紧跟1个小写字母,跟随若干数字,最后以”pattern”结尾等等,就不是一行代码能写出来的了。对于上例,RegEx+Ruby的写法就是
if keyword =~ /^\d[a-z]\d+pattern$/
#do things
end
上式中,//是RegEx的边界,类似””是字符串的边界一样。接下来^代表匹配的开始;\d代表数字,就是0 – 9;[a-z]就是一个从a到z的小写字母了;+是后缀,表示1个或多个,因此\d+就是1个或多个数字的意思了;最后作为关键字的pattern直接写上即可;$代表匹配的结束。
更灵活的应用就是|符号和()括号了。例如判断文本是否包含x或X,RegEx就可以写
/x|X/
如果要判断文本是否包含多个连续的x或者X,例如xXX、XxX,RegEx就可以写
/(x|X)+/
如果要判断文本是否包含XXX、XXXX、XXXXX,RegEx可以写
/X{3,5} /
目前的了解就是这么多了,不过以上这些组合起来应该已经可以应付很多种情况了。继续学习。
UPDATE: Regex tutorial from guru99.com
用java做东东的朋友应该都知道JetBrains(下简称JB)和他们的杰作IntelliJ IDEA(下简称IDEA)。JB的口号是develop with pleasure,快乐的开发。而rails的口号是web development that doesn’t hurt,这个不大好直接翻译了,不痛苦的web开发?HOHO,现在是快乐+无痛苦了,因为IDEA的新插件支持rails开发了。我睡觉都要笑醒了。
此插件的链接在此 。主要功能如下:
最后,IDEA开放了开源软件许可,就是说,如果你手头有个开源项目,有项目网站、活跃的项目论坛,那么你可以申请免费的IDEA许可!省了400多美刀哦~ 我也要建个项目:-)