昨天,已经弄好了项目的显示和添加模块,今天继续完成了项目职能的添加及职能负责人的添加
1、分类的select选择标签
需求:在选择职能名称时,有大类和小类之分,为了更方便用户选择,需要一个可以分类的选择框;
解决方法:在helper中定义一个函数,用改函数按类型生成select的html代码,在将html代码插入到视图代码中即可;具体实现代码为:
def role_selector(obj,name,value)
html = "<select name='#{name}' id='#{name}' size='10'>"
role_groups = RoleGroup.find(:all)
for role_group in role_groups
html += "<option value=''>#{role_group.name}</option>"
for role in role_group.project_roles
sel = (role.id == value.to_i ? " selected='selected'" : "")
html += "<option value='#{role.id}' #{sel}> #{role.name} </option>"
end
end
html += "</select>"
end
2、rails中ajax的应用
在添加职能时,对于不同的职能都有不同的公司与之想对应,不同的公司又有不同的联系人;
其具体过程为:针对某个职能选择某个公司,可先输入改公司名称,再进行搜索(这个过程需要用到一个form_remote_tag来处理);
搜索到的公司会由一个select标签存起来,在其中选择相应的公司,同时,与该公司对应的联系人也会出现在另一个select标签中(该过程需要在select标签的onchange事件中
添加ajax来处理,以获得联系人);
公司搜索的ajax代码为:
<%= form_remote_tag :update=>"add_form",:url=>{:action=>"firm_select"}%>
<input type="text" name="firm_name" size="20">
<input class="button" type="submit" value="搜索并添加公司">
<%= form_tag%>
注:以上form_remote_tag标签的结束标签已由原来的end_form_tag改为form_tag;
onchange时间中的ajax实现:
<%=select_tag "firm_id",options_for_select([["",""]]
[email protected]{|f| ["#{f.name}",f.id]}),
{:onchange=>"new Ajax.Updater('add_contact','/project/contact_select?firm_id='+this.value,{asynchronous:true})"}%>