我有两张桌子 - 报告和主题。如何在Rails中的一行中查询和显示两个表的数据?
以下是关系:
class Subject < ActiveRecord::Base
has_many :term_reports
end
class TermReport < ActiveRecord::Base
belongs_to :subject
end
以下是架构:
create_table "subjects", force: true do |t|
t.string "name"
t.integer "user_id"
t.date "createdate"
end
create_table "term_reports", force: true do |t|
t.string "student_studentid"
t.integer "subject_id"
t.integer "score"
t.integer "position"
t.integer "term"
t.integer "year"
t.integer "user_id"
t.date "ceatedate"
t.string "remark"
t.string "form_class"
end
现在我希望数据是这种格式:
Sujectname score position etc..
请注意,主题名称存储在“项目”表中。 bolow代码仅从一个表生成数据:
@student_subject = TermReport.includes(:subject).all
@student_subject = TermReport.joins(:subject).all
但是,这个sql在Workbench中工作得很好,但是如果我使用find_by_sql则显示来自一个表的数据。帮助
select * from term_reports t, subjects s
where t.subject_id = s.id
答案 0 :(得分:1)
这应该可以正常工作,你可以在你的控制台上试试:
TermReport.includes(:subject).all.each do |term|
puts "#{term.subject.name} #{term.score} #{term.position}"
end
而TermReport.all已足够我认为你不需要包括(主题)。
答案 1 :(得分:0)
谢谢Smek。这是我的控制器动作:
def search_student_results
@student_subject = TermReport.where("student_studentid =? and year =? and term =? and form_class =?",
params[:studentid], params[:year], params[:term], params[:formclass])
respond_to do |format|
format.js {render json: @student_subject}
end
end
这是我的ajax电话:
$(function() {
$('#subject_search_btn').click(function() {
var student_id = $('#search').val();
var year = $('#year').val();
var term = $('#term').val();
var classs = $('#formclass').val();
$.ajax({
"url": "/search_student_results",
"data": {"studentid":student_id, "year":year, "term":term, "formclass":classs},
"type": "get",
"dataType": "json",
"success": function(data) {
var trHTML = '';
$.each(data, function (i, item) {
trHTML += '<tr>' +
'<td>' + item.subject_id + '</td>' +
'<td>' + item.score + '</td>' +
'<td>' + item.position + '</td>' +
'<td>' + item.remark + '</td>' +
'</tr>';
});
$('#subject_tbody').append(trHTML);
},
"error": function() {
alert('Student not found');
}
});
});
});
如何将item.subject_id替换为item.subject.name? 感谢
答案 2 :(得分:0)
所以回答你的上一个问题。
您可以更改:
format.json do
render json: @student_subject.as_json(include: { subject: { only: :name } })
end
使用:
{{1}}