-1

我需要更新单个记录属性,但我不能。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 "/" 

结束结束

错误“[]:ActiveRecord::Relation 的未定义方法‘update_attribute’”

谢谢

4

2 回答 2

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 实例可能不存在的可能性。你应该添加一些逻辑来处理这个......

于 2014-01-16T15:36:59.170 回答
1

您的@postulacion变量包含ActiveRecord::Relation而不是单个ActiveRecord对象。尝试:

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

或者,如果您使用的是 Rails 4:

@postulacion = Postulacion.find_by(alumino_id: @id)
于 2014-01-16T15:38:26.520 回答