取得
由于最近自己做的项目中采用了目前较为流行的经典左右结构,(类似抓虾网),右边窗口采用的是Iframe结构,
系统中科目部分的url是两级的,类似于"localhost:3000/subjects/1/questons",左边窗口中也包含了这个动态的subject_id
切换科目是,由于在iframe里面的操作,左边菜单的sunject_id被没有修改,导致切换科目失效
解决方案:
1、首先在切换科目的action时保存切换的科目的id到cookie中,这里运用rails自带的cookies[:xx] = xxx
def select
cookies.delete :sid
cookies[:sid] = params[:id]
session[:sid] = params[:id]
ref = request.env["HTTP_REFERER"]
ref = ref.gsub(/\/subjects\/\d+\//, "/subjects/#{session[:sid]}/")
redirect_back_or_default(ref)
end
2、再通过js方法refrsh_like()调用cookie值来刷新链接中的subject_id
<li><a target="mainframe" href="" οnclick="refrsh_link('/subjects/','/questions',this)" title="题目列表">题目列表</a></li>
<li><a target="mainframe" href="" οnclick="refrsh_link('/subjects/','/questions/new',this)" title="新建题目">新建题目</a></li>
<li><a target="mainframe" href="" οnclick="refrsh_link('/subjects/','/questions/new_tiku',this)" title="新建综合题">新建综合题</a></li>
<li><a target="mainframe" href="" οnclick="refrsh_link('/subjects/','/questions/import',this)" title="导入题目">导入题目</a></li>
<li><a target="mainframe" href="" οnclick="refrsh_link('/subjects/','/questions/export',this)" title="导出题目">导出题目</a></li>
<li><a target="mainframe" href="" οnclick="refrsh_link('/subjects/','/duplicate_questions',this)" title="探测相似题目">探测相似题目</a></li>
<li><a target="mainframe" href="" οnclick="refrsh_link('/subjects/','/duplicate_questions/miss_answer',this)" title="探测无答案题目">探测无答案题目</a></li>
<li><a target="mainframe" href="" οnclick="refrsh_link('/subjects/','/accuracy_questions',this)" title="题目统计">题目统计</a></li>
<li><a target="mainframe" href="" οnclick="refrsh_link('/subjects/','/accuracy_questions/keywords',this)" title="关键字统计">关键字统计</a></li>
<li><a target="mainframe" href="" οnclick="refrsh_link('/subjects/','/accuracy_questions/points',this)" title="知识点统计">知识点统计</a></li>
3、js方法
function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}
function refrsh_link(before,behind,o){
var id=readCookie('sid');
var href=before + id + behind;
o.href = href;
}
通过读cookie中的来取得最新的subject_id。然后在用户退出系统的时候cookies.delete :sid清除cookie