如何在一列中的多个表中显示多个表的数据
我有两个表 - 报表和主题。如何在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..
注意,主题名称为存储在Sujects表中。从一个表,如果我使用的find_by_sql
@student_subject = TermReport.includes(:subject).all
@student_subject = TermReport.joins(:subject).all
然而,这条SQL运行良好的工作平台,但显示的数据: 的bolow代码只从一个表中生成数据。帮助
select * from term_reports t, subjects s
where t.subject_id = s.id
谢谢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.name取代item.subject_id? 谢谢
首先,当你想从控制器中检索json时,你应该在你的respond_to块中使用format.json。你可以通过覆盖as_json来修改json响应:http://api.rubyonrails.org/classes/ActiveModel/Serializers/JSON.html#method-i-as_json – Smek
我想没有问一个完全不同的问题。如何在每次点击按钮时清除上述ajax调用?实际上,当我更改参数并单击搜索时,加载新结果加上旧结果。 –
这应该只是罚款,你可以尝试一下您的控制台上:
TermReport.includes(:subject).all.each do |term|
puts "#{term.subject.name} #{term.score} #{term.position}"
end
而且TermReport.all足够,我不认为你需要包括(:主题)。
所以要回答你的最后一个问题。
您可以更改:
format.js {render json: @student_subject}
有了:
format.json do
render json: @student_subject.as_json(include: { subject: { only: :name } })
end
工程像魔术。谢谢 –
很高兴解决了这个问题。你介意接受这个答案吗?它可能会帮助人们遇到类似问题,并帮助您发现问题。有关更多 信息,请查看我们的[常见问题](https://stackoverflow.com/help/accepted-answer)。谢谢,欢迎来到SO! – Smek
你覆盖'和'TermReport.joins' TermReport.includes'。 –