2014-01-16 60 views
-1

我需要更新單個記錄屬性,但我不能。 alumno_id是模特'alumno'的外鍵。代碼顯示的記錄,如果在一個記錄提交「Aceptar」,需要改變的屬性埃斯塔1Rails update_attribute找不到

在型號

class Postulacion < ActiveRecord::Base 
    attr_accessible :ramo, :estado, :alumno_id 
    belongs_to :alumno 
end 

在查看

<h1>Lista de Postulaciones</h1> 
<% @postulaciones.each do |p| %> 
<% @id = p.id %> 
<%= @id %> 
<p> 
<td><%= Alumno.find(p.alumno_id).full_name%></td> 
<td><%='=> '+ p.ramo %></td> 
<td><% if p.estado == 0 %> 
    <%= 'Pendiente =>' %> 
    <%= form_tag :action => 'aceptar' do %> 
    <%= submit_tag 'Aceptar' %></p> 
    <%end%> 
    <%else%> 
    <%='=> Aceptado' %> 
    <%end%> 
</td> 
</p> 
<% end %> 

在控制器

class ListadoController < ApplicationController 
    def listar 
    @postulaciones = Postulacion.all 
    respond_to do |format| 
     format.html 
     format.json { render json: @postulaciones } 
    end 
    end 
def aceptar 
    @postulacion = Postulacion.where(id: @id).first #Edit 
     @postulacion.estado = 1 #Edit 
     @postulacion.save #Edit 
    redirect_to "/" 

結束 結束

錯誤 「未定義的方法`update_attribute」爲[]的ActiveRecord ::關係」

感謝

回答

1

有了這個代碼:

@postulacion = Postulacion.where(alumno_id: @id) 

您聲明@postulacion作爲一個集合,而不是作爲一個單個實例。通過使用find_by代替where

@postulacion = Postulacion.where(alumno_id: @id).first 

或者:您可以通過調用.first解決這個

@postulacion = Postulacion.find_by(alumno_id: @id) 

另一件事 - 這個代碼不檢查的可能性Postulacion實例可能不存在。您應該添加一些邏輯來處理此...

+0

TY,但錯誤繼續 – 11Rodrigo

+0

@ 11Rodrigo - 同樣的錯誤?請發佈錯誤堆棧跟蹤的更新代碼。 – PinnyM

+0

「」未定義的方法'update_column'for#「同樣的錯誤 – 11Rodrigo

1

您的@postulacion變量保留ActiveRecord::Relation而不是單個的ActiveRecord對象。嘗試:

def acceptar 
    @postulacion = Postulacion.find_by_alumino_id(@id) 
    # ... 
end 

,或者,如果你會使用Rails 4:

@postulacion = Postulacion.find_by(alumino_id: @id) 
+1

只是一個FYI - 'find_by_attribute'已被棄用(雖然它仍然可以在Rails 3.x中運行) – PinnyM

+0

@PinnyM我知道 - 但它的標籤爲ruby-on-rails-3.2標籤,無論如何。 –