0

我试图确保此方法只允许编辑适合当前帐户的数据。我正在运行 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
4

1 回答 1

1

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

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

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

于 2013-09-27T22:17:13.947 回答