diff --git a/trustie2/app/controllers/relative_memos_controller.rb b/trustie2/app/controllers/relative_memos_controller.rb index 8a059dd..f569474 100644 --- a/trustie2/app/controllers/relative_memos_controller.rb +++ b/trustie2/app/controllers/relative_memos_controller.rb @@ -175,11 +175,11 @@ class RelativeMemosController < ApplicationController #order_by(:created_time, :desc) #with(:created_time, Date.new(year,01,01)..Date.new(year+1,01,01)) - any_of do - # with :parent_id, 0 - # with :parent_id, nil - with :source, params[:name].downcase - end + # any_of do + # # with :parent_id, 0 + # # with :parent_id, nil + # with :source, params[:name].downcase + # end paginate :page => params[:page], :per_page => per_page_option end @topics = search.results diff --git a/trustie2/app/controllers/user_traces_controller.rb b/trustie2/app/controllers/user_traces_controller.rb index febfe3c..8eaa38b 100644 --- a/trustie2/app/controllers/user_traces_controller.rb +++ b/trustie2/app/controllers/user_traces_controller.rb @@ -7,7 +7,7 @@ class UserTracesController < ApplicationController keyword = params[:keyword] logger_search,logger_click,session_id,ip,host,time = generateHead parameter = Hash["keyword" => keyword] - writeLog(logger_search,type,session_id,ip,host,time,parameter) + writeDatabase(logger_search,type,session_id,ip,host,time,parameter) respond_to do |format| format.json {render :json => {}} end @@ -18,7 +18,7 @@ class UserTracesController < ApplicationController keyword = params[:keyword] logger_search,logger_click,session_id,ip,host,time = generateHead parameter = Hash["keyword" => keyword] - writeLog(logger_search,type,session_id,ip,host,time,parameter) + writeDatabase(logger_search,type,session_id,ip,host,time,parameter) respond_to do |format| format.json {render :json => {}} end @@ -32,7 +32,7 @@ class UserTracesController < ApplicationController keyword = params[:keyword] logger_search,logger_click,session_id,ip,host,time = generateHead parameter = Hash["keyword" => keyword, "page" => page, "rank" => rank, "osp_id" => id] - writeLog(logger_click,type,session_id,ip,host,time,parameter) + writeDatabase(logger_click,type,session_id,ip,host,time,parameter) respond_to do |format| format.json {render :json => {}} end @@ -45,7 +45,7 @@ class UserTracesController < ApplicationController id = params[:id] logger_search,logger_click,session_id,ip,host,time = generateHead parameter = Hash["page" => page, "rank" => rank, "osp_id" => id] - writeLog(logger_click,type,session_id,ip,host,time,parameter) + writeDatabase(logger_click,type,session_id,ip,host,time,parameter) respond_to do |format| format.json {render :json => {}} end @@ -56,8 +56,7 @@ class UserTracesController < ApplicationController osp_id = params[:osp_id] logger_search,logger_click,session_id,ip,host,time = generateHead parameter = Hash["osp_id" => osp_id] - session_id = request.session_options[:id] #由于onclick事件在前段js页面 因此无法获取session_id - writeLog(logger_click,type,session_id,ip,host,time,parameter) + writeDatabase(logger_click,type,session_id,ip,host,time,parameter) respond_to do |format| format.json {render :json => {}} end @@ -71,7 +70,7 @@ class UserTracesController < ApplicationController osp_id = params[:osp_id] logger_search,logger_click,session_id,ip,host,time = generateHead parameter = Hash["osp_id" => osp_id, "source" => source, "url" => url, "rank" => rank] - writeLog(logger_click,type,session_id,ip,host,time,parameter) + writeDatabase(logger_click,type,session_id,ip,host,time,parameter) respond_to do |format| format.json {render :json => {}} end @@ -84,7 +83,7 @@ class UserTracesController < ApplicationController rank = params[:rank] logger_search,logger_click,session_id,ip,host,time = generateHead parameter = Hash["osp_id_former" => osp_id_former,"rank" => rank, "osp_id_similar" => osp_id_similar] - writeLog(logger_click,type,session_id,ip,host,time,parameter) + writeDatabase(logger_click,type,session_id,ip,host,time,parameter) respond_to do |format| format.json {render :json => {}} end @@ -111,7 +110,7 @@ class UserTracesController < ApplicationController logger_search,logger_click,session_id,ip,host,time = generateHead parameter = Hash["osp_id_former" => osp_id_former,"rank" => rank, "osp_id_similar" => osp_id_similar] - writeLog(logger_click,type,session_id,ip,host,time,parameter) + writeDatabase(logger_click,type,session_id,ip,host,time,parameter) respond_to do |format| format.json {render :json => {}} end @@ -138,7 +137,7 @@ class UserTracesController < ApplicationController logger_search,logger_click,session_id,ip,host,time = generateHead parameter = Hash["osp_id_former" => osp_id_former,"rank" => rank, "osp_id_similar" => osp_id_similar] - writeLog(logger_click,type,session_id,ip,host,time,parameter) + writeDatabase(logger_click,type,session_id,ip,host,time,parameter) respond_to do |format| format.json {render :json => {}} end @@ -151,7 +150,7 @@ class UserTracesController < ApplicationController rank = params[:rank] logger_search,logger_click,session_id,ip,host,time = generateHead parameter = Hash["osp_id_former" => osp_id_former,"rank" => rank, "osp_id_related" => osp_id_related] - writeLog(logger_click,type,session_id,ip,host,time,parameter) + writeDatabase(logger_click,type,session_id,ip,host,time,parameter) respond_to do |format| format.json {render :json => {}} end @@ -161,7 +160,7 @@ class UserTracesController < ApplicationController type = "click_project_list" logger_search,logger_click,session_id,ip,host,time = generateHead parameter = Hash.new - writeLog(logger_click,type,session_id,ip,host,time,parameter) + writeDatabase(logger_click,type,session_id,ip,host,time,parameter) respond_to do |format| format.json {render :json => {}} end @@ -171,7 +170,7 @@ class UserTracesController < ApplicationController type = "click_more_tags" logger_search,logger_click,session_id,ip,host,time = generateHead parameter = Hash["osp_id" => params[:osp_id]] - writeLog(logger_click,type,session_id,ip,host,time,parameter) + writeDatabase(logger_click,type,session_id,ip,host,time,parameter) respond_to do |format| format.json {render :json => {}} end @@ -181,7 +180,7 @@ class UserTracesController < ApplicationController type = "click_tag" #还可能是帖子的标签 logger_search,logger_click,session_id,ip,host,time = generateHead parameter = Hash["osp_id" => params[:osp_id], "rank" => params[:rank], "tag_name" => params[:tag_name]] - writeLog(logger_click,type,session_id,ip,host,time,parameter) + writeDatabase(logger_click,type,session_id,ip,host,time,parameter) respond_to do |format| format.json {render :json => {}} end @@ -191,7 +190,7 @@ class UserTracesController < ApplicationController type = "click_knowledge_after_search" logger_search,logger_click,session_id,ip,host,time = generateHead parameter = Hash["keyword" => params[:keyword], "sort" => params[:sort], "page" => params[:page], "rank" => params[:rank], "knowledge_id" => params[:id]] - writeLog(logger_click,type,session_id,ip,host,time,parameter) + writeDatabase(logger_click,type,session_id,ip,host,time,parameter) respond_to do |format| format.json {render :json => {}} end @@ -200,8 +199,8 @@ class UserTracesController < ApplicationController def click_knowledge_in_project_detail type = "click_knowledge_in_project_detail" logger_search,logger_click,session_id,ip,host,time = generateHead - parameter = Hash["osp_id" => params[:osp_id], "memo_type" => params[:memo_type], "page" => params[:page], "rank" => params[:rank], "knowledge_id" => params[:memo_id]] - writeLog(logger_click,type,session_id,ip,host,time,parameter) + parameter = Hash["osp_id" => params[:osp_id], "memo_type" => params[:memo_type], "page" => params[:page], "rank" => params[:rank], "knowledge_id" => params[:memo_id], "href" => params[:href]] + writeDatabase(logger_click,type,session_id,ip,host,time,parameter) respond_to do |format| format.json {render :json => {}} end @@ -211,7 +210,7 @@ class UserTracesController < ApplicationController type = "click_more_knowledge_in_project_detail" logger_search,logger_click,session_id,ip,host,time = generateHead parameter = Hash["osp_id" => params[:osp_id], "memo_type" => params[:type]] - writeLog(logger_click,type,session_id,ip,host,time,parameter) + writeDatabase(logger_click,type,session_id,ip,host,time,parameter) respond_to do |format| format.json {render :json => {}} end @@ -221,7 +220,7 @@ class UserTracesController < ApplicationController type = "click_knowledge_in_project_detail_after_click_more" logger_search,logger_click,session_id,ip,host,time = generateHead parameter = Hash["osp_id" => params[:osp_id], "memo_type" => params[:memo_type], "page" => params[:page], "rank" => params[:rank], "knowledge_id" => params[:memo_id], "sort_by" => params[:sort]] - writeLog(logger_click,type,session_id,ip,host,time,parameter) + writeDatabase(logger_click,type,session_id,ip,host,time,parameter) respond_to do |format| format.json {render :json => {}} end @@ -235,7 +234,7 @@ class UserTracesController < ApplicationController keyword = 'nil' end parameter = Hash["keyword" => keyword, "page" => params[:page], "rank" => params[:rank], "osp_id" => params[:osp_id]] - writeLog(logger_click,type,session_id,ip,host,time,parameter) + writeDatabase(logger_click,type,session_id,ip,host,time,parameter) respond_to do |format| format.json {render :json => {}} end @@ -245,7 +244,7 @@ class UserTracesController < ApplicationController type = "click_project_img_after_search" logger_search,logger_click,session_id,ip,host,time = generateHead parameter = Hash["keyword" => params[:keyword], "page" => params[:page], "rank" => params[:rank], "osp_id" => params[:osp_id]] - writeLog(logger_click,type,session_id,ip,host,time,parameter) + writeDatabase(logger_click,type,session_id,ip,host,time,parameter) respond_to do |format| format.json {render :json => {}} end @@ -255,27 +254,75 @@ class UserTracesController < ApplicationController type = "click_project_img_in_project_list" logger_search,logger_click,session_id,ip,host,time = generateHead parameter = Hash["page" => params[:page], "rank" => params[:rank], "osp_id" => params[:osp_id]] - writeLog(logger_click,type,session_id,ip,host,time,parameter) + writeDatabase(logger_click,type,session_id,ip,host,time,parameter) respond_to do |format| format.json {render :json => {}} end end + # 定义函数 将trustie_user_id存储到session中 + def add_trustie_user_id + # 获取参数 + trustie_user_id = params[:trustie_user_id] + if trustie_user_id != nil + # 判断长度是否合乎规范 + if trustie_user_id.length <= 11 + # 表示可能是int型数据 + # 看一下id是否符合规范 是否是真正跳转过来的 + pattern = /\D+/ # 表示字符串中有非数字的字符 + index = (trustie_user_id =~ pattern) + if index == nil + # 表示合法的trustie_user_id + session[:trustie_user_id] = trustie_user_id.to_i + else + session[:trustie_user_id] = nil # 表示trustie_user_id中有除了数字之外的字符 + end + else + session[:trustie_user_id] = nil # 表示长度不合法 + end + else + session[:trustie_user_id] = nil # 表示为空 + end + respond_to do |format| + format.json {render :json => {}} + end + end + + + # 定义函数捕获用户点击link的操作 + def click_link + # url = request.original_url + # url = URI.unescape(url) # 获取url跳转的url地址lick_link" # 表示点击了a链接 + href = params[:href]# 获取href参数 + logger_search,logger_click,session_id,ip,host,time = generateHead + parameter = Hash["url" => href] + writeDatabase(logger_click,type,session_id,ip,host,time,parameter) + respond_to do |format| + format.json {render :json => {}} + end + end + private def generateHead - #创建一个新的日志 - filename = File.join(Rails.root, 'log', 'user_trace_search.log') - logger_search = Logger.new(filename) + # #创建一个新的日志 + # filename = File.join(Rails.root, 'log', 'user_trace_search.log') + # logger_search = Logger.new(filename) +# + # #创建用户click的日志 + # filename = File.join(Rails.root, 'log', 'user_trace_click.log') + # logger_click = Logger.new(filename) - #创建用户click的日志 - filename = File.join(Rails.root, 'log', 'user_trace_click.log') - logger_click = Logger.new(filename) - - session_id = request.session_options[:id] + logger_search = nil + logger_click = nil + session_id = params[:session_id] if session_id == nil - session_id = params[:session_id] + session[:session_id] + session_id = request.session_options[:id] end + # if session_id == nil + # session_id = params[:session_id] + # end # ip = request.remote_ip ip = Socket.ip_address_list.detect(&:ipv4_private?).try(:ip_address) @@ -308,6 +355,34 @@ class UserTracesController < ApplicationController end end + # 张迅晖 将用户行为监控存储到数据库中 + def writeDatabase(logger,type,session_id,ip,host,time,parameter) # logger为了和writeLog保持一致的参数 在该函数中没有实际作用 + # puts "~~~~session_id" + if type != nil && session_id != nil && ip != nil && host != nil && session_id != 'null' && session_id != "" + # 读取session中trustie_user_id + trustie_user_id = session[:trustie_user_id] + # 判断trustie_user_id是否为nil 如果为nil表示不是trustie跳转过来的用户 如果不是nil表示是trustie链接跳转过来的用户 + params = "" # 用于存储参数 + keys_in_parameter = parameter.keys + keys_in_parameter.each do |k| + value = parameter[k] + params = params + "[" + k + "=>" + value.to_s + "]" + end + params = params.strip # 获取到了存储的参数 + + # 将结果存储到数据库中 + userAction = UserAction.new + userAction.trustie_user_id = trustie_user_id + userAction.session_id = session_id + userAction.type = type + userAction.ip = ip + userAction.host = host + userAction.time = time + userAction.params = params + userAction.save + end + end + def getCurrentTime time = Time.new.localtime year = time.year.to_s diff --git a/trustie2/app/models/hot_word.rb b/trustie2/app/models/hot_word.rb index 27acd23..504e056 100644 --- a/trustie2/app/models/hot_word.rb +++ b/trustie2/app/models/hot_word.rb @@ -1,4 +1,4 @@ class HotWord < ActiveRecord::Base attr_accessible :name, :osp_id, :weight belongs_to :open_source_project, :foreign_key => "osp_id" -end +end \ No newline at end of file diff --git a/trustie2/app/models/relative_memo.rb b/trustie2/app/models/relative_memo.rb index dccad41..c693c26 100644 --- a/trustie2/app/models/relative_memo.rb +++ b/trustie2/app/models/relative_memo.rb @@ -38,19 +38,19 @@ class RelativeMemo < ActiveRecord::Base acts_as_attachable #solr search - # searchable do - # text :title, :stored => false - # integer :review_num - # #integer :parent_id - # time :created_time - # text :tags - # string :source, :stored => false - # #integer :view_num - # #integer :view_num_ossean - # #integer :collection_num - # #join(:osp_id, :target => RelativeMemoToOpenSourceProject, :type => :integer, :join => { :from => :relative_memo_id, :to => :id }, :as => 'osp_id') - # #join(:relative_memo_id, :target => RelativeMemoToOpenSourceProject, :type => :integer, :join => { :from => :relative_memo_id, :to => :id }, :as => 'relative_memo_id') - # end + searchable do + text :title, :stored => false + integer :review_num + #integer :parent_id + time :created_time + text :tags + string :source, :stored => false + #integer :view_num + #integer :view_num_ossean + #integer :collection_num + #join(:osp_id, :target => RelativeMemoToOpenSourceProject, :type => :integer, :join => { :from => :relative_memo_id, :to => :id }, :as => 'osp_id') + #join(:relative_memo_id, :target => RelativeMemoToOpenSourceProject, :type => :integer, :join => { :from => :relative_memo_id, :to => :id }, :as => 'relative_memo_id') + end belongs_to :last_reply, :class_name => 'RelativeMemo', :foreign_key => 'last_reply_id' # acts_as_searchable :column => ['title', 'content'], diff --git a/trustie2/app/models/user_action.rb b/trustie2/app/models/user_action.rb new file mode 100644 index 0000000..d836023 --- /dev/null +++ b/trustie2/app/models/user_action.rb @@ -0,0 +1,3 @@ +class UserAction < ActiveRecord::Base + attr_accessible :id, :trustie_user_id, :session_id, :type, :ip, :host, :time, :params +end diff --git a/trustie2/app/views/layouts/_base_welcome_header.html.erb b/trustie2/app/views/layouts/_base_welcome_header.html.erb index 83637d4..e8f3c5a 100644 --- a/trustie2/app/views/layouts/_base_welcome_header.html.erb +++ b/trustie2/app/views/layouts/_base_welcome_header.html.erb @@ -93,6 +93,22 @@
+ + + + + - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/trustie2/app/views/layouts/base_opensource_p.html.erb b/trustie2/app/views/layouts/base_opensource_p.html.erb index 4b77e53..5b45bdd 100644 --- a/trustie2/app/views/layouts/base_opensource_p.html.erb +++ b/trustie2/app/views/layouts/base_opensource_p.html.erb @@ -125,7 +125,9 @@ function user_trace_click_project_source_in_detail(source,url,rank,session_id){ //解析url获取osp_id url_now = document.URL; - id = url_now.substring(47); + str = "open_source_projects/"; + index = url_now.indexOf(str); + id = url_now.substring(index + str.length); $.ajax({ type: "post", contentType: "application/json; charset=utf-8", diff --git a/trustie2/app/views/layouts/base_welcome.html.erb b/trustie2/app/views/layouts/base_welcome.html.erb index 6b2d92f..2e54873 100644 --- a/trustie2/app/views/layouts/base_welcome.html.erb +++ b/trustie2/app/views/layouts/base_welcome.html.erb @@ -40,5 +40,59 @@ <%= call_hook :view_layouts_base_body_bottom %> + + + + + + + + + + + diff --git a/trustie2/app/views/open_source_projects/_search_bar.html.erb b/trustie2/app/views/open_source_projects/_search_bar.html.erb index ba14e4a..fe4fdb9 100644 --- a/trustie2/app/views/open_source_projects/_search_bar.html.erb +++ b/trustie2/app/views/open_source_projects/_search_bar.html.erb @@ -2,7 +2,7 @@ select_option = [] (select_option << ['项目', 'projects']) #(select_option << ['课程', 'courses']) if project_type == Project::ProjectType_course - #select_option << ['热帖', 'memos'] + select_option << ['热帖', 'memos'] #select_option << ['教师', 'users_teacher'], #select_option << ['学生', 'users_student'] %> @@ -86,7 +86,7 @@ <%= text_field_tag :name, nil, placeholder:'请输入要搜索的关键字', :size => 27, :class => "topics-search-text-field" %> <%#= hidden_field_tag 'project_type', project_type %> - <%#= submit_tag l(:label_search_topics), :class => "enterprise", :name => nil, :onclick => "user_trace_search_knowledge_in_search_bar('#{request.session_options[:id]}');" %> + <%= submit_tag l(:label_search_topics), :class => "enterprise", :name => nil, :onclick => "user_trace_search_knowledge_in_search_bar('#{request.session_options[:id]}');" %> <% end %> <%###################search topics###########################%> diff --git a/trustie2/app/views/open_source_projects/_show_memos.html.erb b/trustie2/app/views/open_source_projects/_show_memos.html.erb index c425774..e8e056e 100644 --- a/trustie2/app/views/open_source_projects/_show_memos.html.erb +++ b/trustie2/app/views/open_source_projects/_show_memos.html.erb @@ -59,9 +59,9 @@
- <%= link_to h(truncate(memo.title, :length => 30)), memo.url, :target => '_blank', :onclick => "return user_trace_click_knowledge_in_project_detail('#{type}','#{memo.id}','#{request.session_options[:id]}',null,'#{i+1}');" %> + <%= link_to h(truncate(memo.title, :length => 30)), memo.url, :target => '_blank', :onclick => "return user_trace_click_knowledge_in_project_detail(this,'#{type}','#{memo.id}','#{request.session_options[:id]}',null,'#{i+1}');" %>
- 来源: <%= link_to memo.source, memo.url, :onclick => "return user_trace_click_knowledge_in_project_detail('#{type}','#{memo.id}','#{request.session_options[:id]}',null,'#{i+1}');" %> + 来源: <%= link_to memo.source, memo.url, :onclick => "return user_trace_click_knowledge_in_project_detail(this,'#{type}','#{memo.id}','#{request.session_options[:id]}',null,'#{i+1}');" %> <%= user_url_and_time memo.author, memo.url, memo.created_time %>
@@ -74,7 +74,7 @@ - + @@ -85,7 +85,7 @@ + + + \ No newline at end of file diff --git a/trustie2/app/views/open_source_projects/show.html.erb b/trustie2/app/views/open_source_projects/show.html.erb index bddca2d..cac8996 100644 --- a/trustie2/app/views/open_source_projects/show.html.erb +++ b/trustie2/app/views/open_source_projects/show.html.erb @@ -401,7 +401,12 @@ id_similar = content.substring(22); //要跳过第一个 /open_source_projects/123 第22个字符到最后 //获取当前项目id url = document.URL; - id_former = url.substring(47); + str = "open_source_projects/" + index = url.indexOf(str); + id_former = null; + if (index >= 0){ + id_former = url.substring(index + str.length); + } $.ajax({ type: "post", contentType: "application/json; charset=utf-8", @@ -420,7 +425,12 @@ id_related = content.substring(22); //要跳过第一个 /open_source_projects/123 第22个字符到最后 //获取当前项目id url = document.URL; - id_former = url.substring(47); + str = "open_source_projects/" + index = url.indexOf(str); + id_former = null; + if (index >= 0){ + id_former = url.substring(index + str.length); + } $.ajax({ type: "post", contentType: "application/json; charset=utf-8", @@ -442,7 +452,12 @@ id_similar = id //获取当前项目id url = document.URL; - id_former = url.substring(47); + str = "open_source_projects/" + index = url.indexOf(str); + id_former = null; + if (index >= 0){ + id_former = url.substring(index + str.length); + } // id_former = url.substring(43); $.ajax({ type: "post", @@ -465,7 +480,12 @@ id_similar = id //获取当前项目id url = document.URL; - id_former = url.substring(47); + str = "open_source_projects/" + index = url.indexOf(str); + id_former = null; + if (index >= 0){ + id_former = url.substring(index + str.length); + } // id_former = url.substring(43); $.ajax({ type: "post", diff --git a/trustie2/app/views/relative_memos/search.html.erb b/trustie2/app/views/relative_memos/search.html.erb index 3ca5c13..d07a723 100644 --- a/trustie2/app/views/relative_memos/search.html.erb +++ b/trustie2/app/views/relative_memos/search.html.erb @@ -255,13 +255,13 @@ <%= content_tag('span', l(:label_review_num)) %>

-

+ - <%= topic.collection_num %> + <%#= topic.collection_num %> - <%= content_tag('span', l(:label_collection_num)) %> -

+ <%#= content_tag('span', l(:label_collection_num)) %> +

-->

@@ -297,7 +297,7 @@ <%= content_tag('span', "帖子来源:") %><%= link_to topic.url, topic.url, :onclick => "return user_trace_click_knowledge_in_knowledge_list_after_search('#{topic.id}','#{@topics_pages.page}','#{i+1}','#{request.session_options[:id]}');" %> - +

diff --git a/trustie2/config/application.rb b/trustie2/config/application.rb index 11bb08c..ff22423 100644 --- a/trustie2/config/application.rb +++ b/trustie2/config/application.rb @@ -52,7 +52,7 @@ module RedmineApp # Do not include all helpers config.action_controller.include_all_helpers = false - config.session_store :cookie_store, :key => '_redmine_session', :expire_after => 24.hours + config.session_store :cookie_store, :key => '_redmine_session', :expire_after => 60.minutes if File.exists?(File.join(File.dirname(__FILE__), 'additional_environment.rb')) instance_eval File.read(File.join(File.dirname(__FILE__), 'additional_environment.rb')) diff --git a/trustie2/db/migrate/20170128123748_create_user_actions.rb b/trustie2/db/migrate/20170128123748_create_user_actions.rb new file mode 100644 index 0000000..30af398 --- /dev/null +++ b/trustie2/db/migrate/20170128123748_create_user_actions.rb @@ -0,0 +1,8 @@ +class CreateUserActions < ActiveRecord::Migration + def change + create_table :user_actions do |t| + + t.timestamps + end + end +end diff --git a/trustie2/test/fixtures/user_actions.yml b/trustie2/test/fixtures/user_actions.yml new file mode 100644 index 0000000..c63aac0 --- /dev/null +++ b/trustie2/test/fixtures/user_actions.yml @@ -0,0 +1,11 @@ +# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/Fixtures.html + +# This model initially had no columns defined. If you add columns to the +# model remove the '{}' from the fixture names and add the columns immediately +# below each fixture, per the syntax in the comments below +# +one: {} +# column: value +# +two: {} +# column: value diff --git a/trustie2/test/unit/user_action_test.rb b/trustie2/test/unit/user_action_test.rb new file mode 100644 index 0000000..846ef33 --- /dev/null +++ b/trustie2/test/unit/user_action_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class UserActionTest < ActiveSupport::TestCase + # test "the truth" do + # assert true + # end +end
<%= link_to (memo.review_num), memo.url, :target => '_blank', :onclick => "return user_trace_click_knowledge_in_project_detail('#{type}','#{memo.id}','#{request.session_options[:id]}',null,'#{i+1}');" %><%= link_to (memo.review_num), memo.url, :target => '_blank', :onclick => "return user_trace_click_knowledge_in_project_detail(this,'#{type}','#{memo.id}','#{request.session_options[:id]}',null,'#{i+1}');" %>
回帖