2013-07-18 17 views
0

我有我的學生表:更新不同領域的一列所有值形成(軌道3)

   id | fname | gname | course | year | 
      ---------------------------------------- 
       1| user 1| user 1| IT | 5 | 
      ---------------------------------------- 
       2| user 2| user 2| CompE | 3 | 
      ---------------------------------------- 
       3| user 3| user 3| Nursing| 2 | 

在我的控制,我使用* HASH顯示學生信息 *

def index 
    @students = Student.all 
    @studentlist = HASH.new 
    @students.each do |s| 
    @studentlist[s.id] = s 
    end 
end 

在我的索引視圖我有這個

<%=form_tag "/students/update_year" do%> 
<table> 
    <tr> 
     <th>id</th> 
     <TH>Family Name</TH> 
     <TH>Year</TH> 
    </tr> 
    <%@studentlist.each_key do |key|%> 
     <tr> 
      <td><%[email protected][key].id%></td> 
      <td><%[email protected][key].fname%></td> 
      <td><%=collection_select(:student,:year,Student.select('distinct year') , :year , :year ,:selected=>@studentlist[key].year %></td> 
     </tr>  
    <%end%> 
</table> 
<%=submit_tag("Update")%> 
  • 我要改變學生的一年,點擊更新,但我的問題是,當我更新這一切的列中的值將會更改並具有相同的值。

這是我的控制器update_year行動:

def update_year 
    @students = Student.all 
    @studentlist = HASH.new 
    @students.each do |s| 
     @studentlist[s.id] = s 
     @studentlist.each_key do |key| 
     @student = Student.find(@studentlist[key].id) 
     @student.update_attributes(params[:student]) 
    end 
    end 
end 

它不會更新或值將不會更新到我已在collection_select

設置請幫我 ! 謝謝。

回答

1

我希望你能學會從這個答案的東西。

def index 
    @students = Student.all 
    @years = Student.uniq.pluck(:year) 
end 

index.html.erb 

<% @students.each do |student| %> 
    <tr> 
    <td><%= student.id %></td> 
    <td><%= student.fname %></td> 
    <td> 
     <%= hidden_field_tag 'student[][id]', student.id %> 
     <%= select :student, :year, @years, { selected: student.year }, { name: 'student[][year]' } %> 
    </td> 
    </tr>  
<% end %> 

上面的代碼不使用哈希創建您的表。它還會創建在提交表單時會生成散列的字段。哈希看起來像

params[:student] = [{ id: 1, year: 1 }, { id: 2, year: 2}] 

idstudent_idyear在下拉菜單中選擇年份。鑑於此,您可以使用下面的代碼update_year

def update_year 
    params[:students].each do |student| 
    student = Student.find(student[:id]) 
    student.update_attributes(year: student[:year]) 
    end 
end 

免責聲明:上面的代碼沒有進行測試,並且被寫入試圖幫助您瞭解如何能夠解決您的問題。

+0

我試過了代碼,它給了我'未定義的方法每個無類'指向錯誤的控制器** update_year **行動 –

+0

我已經知道了..在我的update_year動作中,我只在'student = Student.find(student [:id]'和'student.update_attributes(year:student [:year])'中加入'@''。在我的代碼...'@student = Student.find(student [:id]) @ student.update_attributes(year:student [:year])'.. –

+0

你不需要這樣做。導致錯誤的'update_year'視圖模板中的'@ student'。 – jvnill

0
  1. 爲什麼你使用散列顯示錶?
  2. 在你update_year行動是不明智的,從數據庫獲取所有的學生,因爲它是時間和DB耗時,你不需要它..
+0

我該如何更新我的所有年份列只有一種形式 –