2017-10-18 66 views
1

我有兩個表 - 報表和主題。如何在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 
+0

你覆蓋'和'TermReport.joins' TermReport.includes'。 –

回答

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.name取代item.subject_id? 謝謝

+0

首先,當你想從控制器中檢索json時,你應該在你的respond_to塊中使用format.json。你可以通過覆蓋as_json來修改json響應:http://api.rubyonrails.org/classes/ActiveModel/Serializers/JSON.html#method-i-as_json – Smek

+0

我想沒有問一個完全不同的問題。如何在每次點擊按鈕時清除上述ajax調用?實際上,當我更改參數並單擊搜索時,加載新結果加上舊結果。 –

1

這應該只是罰款,你可以嘗試一下您的控制檯上:

TermReport.includes(:subject).all.each do |term| 
    puts "#{term.subject.name} #{term.score} #{term.position}" 
end 

而且TermReport.all足夠,我不認爲你需要包括(:主題)。

0

所以要回答你的最後一個問題。

您可以更改:

format.js {render json: @student_subject} 

有了:

format.json do 
    render json: @student_subject.as_json(include: { subject: { only: :name } }) 
end 
+0

工程像魔術。謝謝 –

+0

很高興解決了這個問題。你介意接受這個答案嗎?它可能會幫助人們遇到類似問題,並幫助您發現問題。有關更多 信息,請查看我們的[常見問題](https://stackoverflow.com/help/accepted-answer)。謝謝,歡迎來到SO! – Smek

相關問題