/
questions_controller.rb
80 lines (74 loc) · 2.71 KB
/
questions_controller.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
class QuestionsController < ApplicationController
include Algorithms::Rank::RSVD
before_filter :force_xml
# GET /questions/1
# ==== Return
# Question and stats.
# ==== Options (params)
# id<String>:: Converted to integer. ID of question.
# ==== Raises
# PermissionError:: If question does not belong to user.
def show
@question = Question.first(:conditions => { :id => params[:id], :user_id => current_user.id })
if @question
@items_count = Item.count(
:joins => "INNER JOIN items_questions ON (items_questions.item_id=items.id AND items_questions.question_id=#{@question.id})",
:conditions => { :active => true }
)
@all_items_count = Item.count(:joins => "INNER JOIN items_questions ON (items_questions.item_id=items.id AND items_questions.question_id=#{@question.id})")
@votes_count = Prompt.count(:joins => "INNER JOIN votes ON (votes.prompt_id=prompts.id)", :conditions => { :question_id => @question.id })
end
end
# POST /questions/add
# ==== Return
# Added question.
# ==== Post
# Formatted XML of question to add.
def add
return unless request.post?
xml = LibXML::XML::Parser.parse(request.raw_post)
@questions = []
xml.find("/questions/question").each do |question|
@questions << Question.create(:user_id => current_user.id, :name => question.content)
end
GC.start
end
# POST /questions/delete
# ==== Return
# Question and deletion status.
# ==== Options (params)
# id<String>:: Converted to integer. ID of question.
# ==== Raises
# PermissionError:: If question does not belong to user.
def delete
return unless request.post?
question = Question.find(@id = params[:id], :conditions => { :user_id => current_user.id })
question.destroy
@success = !Question.exists?(@id)
end
# GET /questions/list
# ==== Return
# Array of user questions.
def list
@questions = current_user.questions
@items_count = Item.count(:conditions => { :user_id => current_user.id, :active => true })
@all_items_count = Item.count(:conditions => { :user_id => current_user.id })
@votes_count = Prompt.count(:joins => "INNER JOIN votes ON (votes.prompt_id=prompts.id)", :conditions => { :question_id => current_user.question_ids })
end
# GET /questions/1
# ==== Return
# Question SVD.
# ==== Options (params)
# id<String>:: Converted to integer. ID of question.
# ==== Raises
# PermissionError:: If question does not belong to user.
def svd
@question = Question.first(:conditions => { :id => params[:id], :user_id => current_user.id })
if @question
sol = load_solution(@question.id)
if sol && sol.shift
@h, @v, @p, @items, @visits = sol
end
end
end
end