我需要更新单个记录属性,但我不能。 alumno_id是模特'alumno'的外键。代码显示记录,如果在一条记录中提交'Aceptar',则需要将属性estado更改为1
模型中的
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 :: Relation”
由于
答案 0 :(得分:1)
使用此代码:
@postulacion = Postulacion.where(alumno_id: @id )
您将@postulacion
声明为集合,而不是单个实例。您可以致电.first
:
@postulacion = Postulacion.where(alumno_id: @id ).first
或者使用find_by
代替where
:
@postulacion = Postulacion.find_by(alumno_id: @id )
另一件事 - 此代码未检查Postulacion实例可能不存在的可能性。你应该添加一些逻辑来处理这个......
答案 1 :(得分:1)
您的@postulacion
变量包含ActiveRecord::Relation
而不是单个ActiveRecord
对象。尝试:
def acceptar
@postulacion = Postulacion.find_by_alumino_id(@id)
# ...
end
或者,如果您使用的是Rails 4:
@postulacion = Postulacion.find_by(alumino_id: @id)