我有一个用户模型,它将返回状态为true的用户研究:
has_many :user_studies, -> { where(status: true) }, dependent: :destroy
我使用它超过80%的功能,但在某些情况下我想覆盖这行代码。
我在User控制器中有一个私有方法,用于完成用户学习的工作:
def set_user_study
@user_study = @user.user_studies.find(params[:id])
end
@user在另一个私有方法中设置:
def set_user
@user = users_api.find_by_guid(params[:user_id])
rescue Longboat::Api::Users::NotFound => e
logger.error e.message
raise ActionController::RoutingError.new('Not Found')
end
当我尝试编辑user_study(以及其他)时调用private方法:
before_action :set_user_study, only: [:edit, :update, :destroy]
在尝试编辑状态为true的研究时,显然会出现以下错误:
Couldn't find UserStudy with 'id'=1 [WHERE "user_studies"."user_id" = ? AND "user_studies"."status" = 't']
如何继续调用私有方法,但允许用户能够编辑用户研究状态是否为真?
答案 0 :(得分:1)
如果您的目标只是覆盖关联,请不要使用@user.user_studies
。相反,查询值并在私有方法中使用UserStudy.where(user_id: @user.id)
。但是,如果现有代码中user_studies
的使用率较低,则只需删除关联条件和链范围即可添加此条件。