我正在尝试确保此方法仅允许编辑适合当前帐户的数据。我正在运行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
答案 0 :(得分:1)
您当前的@dataload
实例变量包含ActiveRecord::Relation
类型,您实际上希望它保存DataloadMailchimp
个对象。请尝试以下查找:
@dataload = DataloadMailchimp.find_by_account_id(current_user.account.id)
作为一个FYI,where()
方法返回一个ActiveRecord::Relation
对象,其中包含与条件匹配的所有类对象的集合。相反,find_by_
返回与条件匹配的类对象的第一个实例。