0

问题陈述

在我的控制器中,我正在尝试使用 更改not_registered更新中的布尔属性resource.update_attribute(resource.not_registered, 1),但正在获取NoMethodError: undefined method 0= for #<User:0x007fe470de2950. 知道为什么会这样吗?感谢您可能有的任何想法,这是我在完成这个项目之前需要解决的最后一个错误,这将是我在 RoR 中的第一个!

我的进步

  • 我考虑save改用,但不能,因为我需要跳过验证。也似乎效率低下,因为我只更新一个属性
  • 在 shell 中,resource(由 Devise 创建)似乎是当前用户的一个实例
  • 在执行更新控制器之前resource.not_registered => 0,这是正确的......所以我知道这resource.not_registered是正确的语法。
  • 如果我跑步resource.update_attribute,我会得到!! #<ArgumentError: wrong number of arguments (0 for 2)>……所以我知道它update_attribute作为一种方法存在resource
  • 最后,我在这里找到了 update_attribute 的文档。

代码

/app/controllers/registrations_controller.rb:

class RegistrationsController < Devise::RegistrationsController
    def update
        if resource.update_with_password(params[resource_name])        
            resource.update_attribute(resource.not_registered, "1") # this is where I get my error message
            set_flash_message :notice, :updated
            sign_in resource_name, resource, :bypass => true
            redirect_to after_update_path_for(resource)
        else
            clean_up_passwords(resource)
            render "edit"
        end     
    end

    # Code removed for brevity
end

/app/models/user.rb:

class User < ActiveRecord::Base

  devise :database_authenticatable, :registerable, :token_authenticatable,
         :recoverable, :rememberable, :trackable, :validatable, :confirmable

  attr_accessible :email, :password, :password_confirmation,
  :remember_me, :not_registered, :pay_method, :pay_desc, :email_instructions, :current_password

  def update_with_password(params={})
      # code removed for brevity
  end
end

从服务器获取Angular工厂中新创建资源的ID

我正在构建一个由 Node.js/Mongodb 应用程序支持的 Angular 应用程序。

id每个资源创建资源时由 Mongodb 生成。

在我POST将新对象从工厂发送到服务器后,服务器返回一个201响应代码,其中位置标头设置为新资源的 URI。如何处理响应,然后用正确的更新记录id

angular.module('myApp.Todoservices',['ngResource']).
factory('Todo',function($resource){
    return $resource('http://localhost\\:3000/todos/:id', {id:'@_id'}, {
        getAll: {method:'GET', isArray:true},
        update : {method:'PUT'},
        create : {method:'POST'},
        delete : {method:'DELETE'}
    });
});
4

1 回答 1

2

更改以下行

resource.update_attribute(resource.not_registered, "1") # this is where I get my error message

resource.update_attribute(:not_registered, "1") # this is where I get my error message

并阅读一些可靠的 Rails 文档。我建议通过http://guides.rubyonrails.org/index.html

于 2013-06-22T20:13:11.487 回答