Rails 6 Active Storage:无法找到或建立Blob:预期可附加...((重置)附件时发出)

在我的应用程序中,管理员用户可以建议并编辑到另一个用户的个人资料。我希望管理员用户能够为非管理员用户建议一个(新)头像。当前,我的用户(我的应用程序中的用户= spkr)模型具有:

has_one_attached :image
has_one_attached :edited_image

image是用户选择的头像图片,edited_image是管理员用户建议的头像图片。

使用管理员“更新”表单时,edited_image已设置

if spkr_params[:edited_image].present?
  @spkr.edited_image = spkr_params[:edited_image]
end

此操作成功将附件设置为edited_image

当管理员用户提交编辑内容时,非管理员用户会收到确认电子邮件。单击后,我希望非管理员用户的image进行更新。

...
if @spkr.edited_image.present?
   @spkr.image.purge
   @spkr.image = @spkr.edited_image
end
@spkr.save!

但是我收到了@spkr.save!上出现的以下错误:

Could not find or build blob: expected attachable,got #<activeStorage::Attached::One:0x00007fdcc44fa440 @name="edited_image",@record=#<Spkr id: 154... >>

edited_image中的@spkr

@spkr.edited_image
=> #<activeStorage::Attached::One:0x00007fdcc44fa440 @name="edited_image",@record=#<Spkr id: 154...>>

我的感觉是@ spkr.edited_image不是@ spkr.edited_image的“可附加部分”,但是我不确定如何解决此问题。

谢谢您的帮助。

liuliuliu01 回答:Rails 6 Active Storage:无法找到或建立Blob:预期可附加...((重置)附件时发出)

我通过替换行

解决了这个问题
<!DOCTYPE html>
<html>
<head>
	<meta charset='UTF-8'>
	
	<title>title</title>
	
	<link rel='stylesheet' href='css/style.css'>
	
	<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>

	<script>
		$(function() {
		
			$("#text-one").change(function() {
				$("#text-two").load("textdata/" + $(this).val() + ".txt");
			});
			
			$("#json-one").change(function() {
			
				var $dropdown = $(this);
			
				$.getJSON("jsondata/data.json",function(data) {
				
					var key = $dropdown.val();
					var vals = [];
										
					switch(key) {
						case 'q1':
							vals = data.q1.split(",");
							break;
						case 'q2':
							vals = data.q2.split(",");
							break;
						case 'base':
							vals = ['Please choose from above'];
					}
					
					var $jsontwo = $("#json-two");
					$jsontwo.empty();
					$.each(vals,function(index,value) {
						$jsontwo.append("<option>" + value + "</option>");
					});
			
				});
			});
            
            			$("#json-two").change(function() {
			
				var $dropdown = $(this);
			
				$.getJSON("jsondata/data.json",function(data) {
				
					var key = $dropdown.val();
					var vals = [];
										
					switch(key) {
						case 'q3':
							vals = data.q3.split(",");
							break;
						case 'q4':
							vals = data.q4.split(",");
							break;
						case 'base':
							vals = ['Please choose from above'];
					}
					
					var $jsonthree = $("#json-three");
					$jsonthree.empty();
					$.each(vals,value) {
						$jsonthree.append("<option>" + value + "</option>");
					});
			
				});
			});

		});
	</script>
</head>

<body>

	<div id="page-wrap">
	
		
		<h1>Header</h1>

		<select id="json-one">
			<option selected value="base">Please Select</option>
			<option value="q1">Question 1</option>
			<option value="q2">Question 2</option>
		</select>
	
		<br />
	
		<select id="json-two">
			<option>Please choose from above</option>
		</select>
        
        <br>
        
        <select id="json-three">
			<option>Please choose from above</option>
		</select>
	
	</div>
	
</body>

</html>

使用

{
	"q1": "a1,a2,a3,a4","q2": "ab1,ab2,ab3,ab4","q3": "abc1,abc2","q4": "abcd1,abcd2,abcd3"
}

这也起作用:

@spkr.image = @spkr.edited_image
本文链接:https://www.f2er.com/2685023.html

大家都在问