【问题标题】:Rails find object id on has_many associationRails 在 has_many 关联上查找对象 id
【发布时间】:2017-03-19 03:50:18
【问题描述】:

我正在尝试获取与 current_user 关联的事务 ID,但 rails 在下面显示此错误

错误:

ActiveRecord::RecordNotFound(找不到 id=92 的事务 [WHERE "交易"."user_id" = 24])

我尝试使用 where 和 just the transaction,并有条件地将 transaction.user_id 与 current_user.id 进行比较,但显示错误!

有人对这类问题有任何暗示吗?

model user

user has_many transactions

model transaction 

transaction belongs to user


transaction controller

def new
@transaction = Transaction.new
end

def create

@transaction = Transaction.build_user

end



def show

@transaction = current_user.transactions.find(params[:id])

end

【问题讨论】:

  • 你复制粘贴了吗?如果是这样:您确实认识到您的事务模型中存在类型错误?属于用户的不是“交易”而是“交易”。那里缺少一个“n”。
  • 在您的Transaction 中,ID 为92,没有user_id。检查使用您的控制台输入rails c。然后找到id为'92'的Transaction,看是否包含user_id
  • 鸸鹋,包含。谢谢你
  • @transaction = Transaction.build_user 只是初始化与事务关联的用户,但不会将用户保存到数据库 - 用户 create_user 代替。此外,这将创建一个不是current_user 的新用户,这是您想要的吗?
  • 可能它的交易不属于这个用户。

标签: mysql ruby-on-rails ruby ruby-on-rails-3 activerecord


【解决方案1】:

正如许多在 cmets build_user 中指出的那样,确实创建了一个新的 User 实例(没有保存它)。此外,我相信build_user 不是类方法,而是实例方法。因此 Transaction.build_user 应该引发“未定义的方法”异常。另外,build_user 返回一个 User 实例,所以即使你的代码是 @transaction = Transaction.new.build_user @transaction 也会是一个新创建的 User 实例。

同样,其他人已经在 cmets 中指出,您的事务不一定与 current_user 相关联,以便您在同一会话期间的后续调用中像这样获取它,而是假设您正确构建和保存用户,您需要以该“新用户”身份登录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-20
    相关资源
    最近更新 更多