如何使用Devise正确地在Rails中扩展公共方法

时间:2013-09-27 22:12:58

标签: ruby-on-rails-3 devise

我正在尝试确保此方法仅允许编辑适合当前帐户的数据。我正在运行Rails 3.12,使用acts_as_tenant管理帐户,并设计用户身份验证。

当我尝试访问/ dataload_mailchimp / edit时,出现以下错误:

NoMethodError (undefined method `api_key' for #<ActiveRecord::Relation:0x00000006d02590>):
2013-09-27T17:12:23.947590+00:00 app[web.1]:   app/controllers/dataload_mailchimps_controller.rb:32:in `edit'

据我所知,错误找不到api_key。但是,我以account_id = 3的用户身份登录,并且dataload_mailchimps表中的account_id有一个有效的api_key。

我想更好地理解我如何正确定位此方法,以便返回dataload_mailchimps中的正确记录?

感谢您提供任何帮助或建议。

我的控制员:

class DataloadMailchimpsController < ApplicationController
  before_filter :authenticate_user!
  def edit
    @dataload = DataloadMailchimp.where( account_id: current_user.account )
    unless @dataload
      redirect_to new_dataload_mailchimp_path
    else
      gibbon = Gibbon.new(@dataload.api_key)
      @lists = []
      gibbon.lists['data'].each do |list|
        @lists << MailchimpList.find_or_create_by_list_id(:list_id => list['id'], :name => list['name'])
      end
    end
  end
end
来自dataload_mailchimps表的

id      api_key       account_id
4       6a3           3

1 个答案:

答案 0 :(得分:1)

您当前的@dataload实例变量包含ActiveRecord::Relation类型,您实际上希望它保存DataloadMailchimp个对象。请尝试以下查找:

@dataload = DataloadMailchimp.find_by_account_id(current_user.account.id)

作为一个FYI,where()方法返回一个ActiveRecord::Relation对象,其中包含与条件匹配的所有类对象的集合。相反,find_by_返回与条件匹配的类对象的第一个实例