我有一个Rails应用,其中有一个用户has_one
帐户,然后是一个帐户belongs_to
用户。我希望其他数据可以从帐户中继承(例如产品或零件)。但是我不知道如何创建新零件并将新零件分配给创建时当前用户的帐户。
我在这里做错了什么?我正在尝试像这样构建新零件:
@account = current_user.account.id
@part = @account.build_part(part_params)
导致此错误:
undefined method `build_part' for 1:Integer when creating a belongs_to association in rails
而且,我也尝试过这样做:
@account = current_user.account.id
@part = @account.build.parts(part_params)
但这给了我这个错误:
undefined method `build' for 1:Integer
在Rails中执行此操作的正确方法是什么? (当前正在运行Rails 6的Beta版。)
以下是相关代码:
模型...
class Account < ApplicationRecord
belongs_to :user
has_many :parts
end
class Part < ApplicationRecord
belongs_to :account
belongs_to :part_category
belongs_to :part_unit
end
class User < ApplicationRecord
include Clearance::User
has_one :account
end
答案 0 :(得分:1)
@account = current_user.account.id
是整数,因此当然会导致错误。只需删除id
部分。
答案 1 :(得分:1)
您需要获取@account
中的帐户记录,而不仅仅是其ID,以便构建与帐户相关的部分。
问题出在代码的这一部分:
@account = current_user.account.id
@part = @account.build_part(part_params)
在这里,我们使用当前用户的帐户ID代替帐户记录来初始化@account
。这导致@account
保留一个整数值(帐户的ID)。而且,默认情况下,整数没有为其类定义任何称为build_part
的方法,这将导致错误!
只需将@account = current_user.account.id
更改为@account = current_user.account
即可。
您可以阅读有关建立关联的更多信息here