找不到Rails update_attribute

时间:2014-01-16 15:31:19

标签: ruby-on-rails ruby model ruby-on-rails-3.2 update-attribute

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

由于

2 个答案:

答案 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)