2016-10-03 74 views
2

我有一個具有主題和成績屬性的模特學生。一個學生可以有很多科目和等級,我想要做的是能夠發佈爲特定學生列出的第二或第三個科目。例如,用戶搜索學生,然後單擊學生,這會將他們帶到一個單獨的頁面,列出關於該特定學生的信息(即學生ID:1)。有沒有可以添加到視圖中的代碼來列出主題和等級屬性中的第n項?發佈模型的第n個屬性

我在這裏看到網上發現類似的問題,但這些解決方案與模型相關,而不是屬性。例如,一種解決方案採用極限方法在控制器建議,另一個使用下面的代碼推薦:

<% firm.state_of_business.split(',').each_with_index do |state, index| %> 
     <td> <b>State <%= index + 1 %></b> <%= state %> 

這似乎很好地工作,當你沒有選擇一個特定的模式。當你選擇一個特定的模型(即學生ID:1)時,這似乎不起作用。至少不適合我。現在我的代碼顯示了第一項。我怎樣才能得到它列出的科目1 & 1級,科目2 & 2級,科目3 & 3級,等等。請參閱下面的示例代碼。請注意,我在這裏嘗試了其他解決方案,但無法讓他們工作,這讓我覺得我的問題可能與先前提出的問題不同。謝謝你的幫助。

查看代碼

<h2>Students</h2> 

    <p> Student: 
    <%= @student.name %> 
</p> 

<table> 
    <tr> 
    <th> Subject </th> 
    <th> Grade </th> 

</tr> 
    <tr> 
     <td><%= @student.subject %> </td> 
     <td><%= @student.grade %> </td> 
    <tr> 
    </table> 

控制器顯示方法

def show 
    @user = current_user 
    @student = Student.find(params[:id]) 
    end 

所需的輸出

Student: Matt Jones 

Subject Grade 
Math  95 
History 90 
English 91 

回答

1

嘗試添加以下代碼:

<%= @student.grade.split(',')[0] %> 

的[0]將陣列中發佈的第一項。 [1]將發佈第二項等,這應該工作。

+0

感謝richiepop!該解決方案完美運作。這實際上與我在這裏找到的非常相似,但有一點不同。感謝幫助。 – DCRubyHound

0

我客串您可以創建另一個名爲Subject的模型,並在class Student中添加has_many :subjects

class Subject中,您可以添加此行belongs_to :student

然後你就可以做到這一點是這樣的:

<% @student.subjects.each do |subject| %> 
    <tr> 
    <td><%= subject.name %> </td> 
    <td><%= subject.grade %> </td> 
    <tr> 
<% end %> 

只是要清楚,Subject模型包含屬性namegrade在上面的例子中。

+0

感謝您的回覆,adrian。我確實給了這個解決方案一些想法,但考慮到我有很多屬性,我想盡量找到一種方法來發布第n個項目,而無需創建單獨的模型。希望有另一種方式。不過謝謝你。 – DCRubyHound

相關問題