我刚刚添加了这行代码:<%= image_tag tweet.user.avatar %>
到以下视图文件
<%= turbo_frame_tag dom_id(tweet) do %>
<div class="tweet py-3 px-2">
<% if(Time.zone.now - tweet.created_at) > 1.day %>
<%= image_tag tweet.user.avatar %>
<p><%= tweet.user.display_name %>@<%= tweet.user.username %> . <%= tweet.created_at.strftime("%b %-d") %></p>
<% else %>
<%= image_tag tweet.user.avatar %>
<p><%= tweet.user.display_name %>@<%= tweet.user.username %> . <%= time_ago_in_words(tweet.created_at) %></p>
<% end %>
<p class="mb-0"><%= tweet.body %></p>
</div>
<% end %>
这行代码用于显示通过ActiveStorage附加到用户的图像。我检查控制台,图像成功加载:
=> #<ActiveStorage::Attached::One:0x000000010813cf50
@name="avatar",
@record=
#<User id: 3, email: "rajdeep@gmail", created_at: "2023-03-30 08:29:06.001223000 +0000", updated_at: "2023-03-30 21:35:17.296341000 +0000", username: "rj_deep", display_name: "Raja Deep">>
但是,我在显示加载的图像时收到此消息:
ActionView::Template::Error (Can't resolve image into URL: undefined method `persisted?' for nil:NilClass
|
named_route = if model.persisted?
^^^^^^^^^^^):
4: <%= image_tag tweet.user.avatar %>
5: <p><%= tweet.user.display_name %>@<%= tweet.user.username %> . <%= tweet.created_at.strftime("%b %-d") %></p>
6: <% else %>
7: <%= image_tag tweet.user.avatar %>
8: <p><%= tweet.user.display_name %>@<%= tweet.user.username %> . <%= time_ago_in_words(tweet.created_at) %></p>
9: <% end %>
10: <p class="mb-0"><%= tweet.body %></p>
在我添加这行代码之前,所有其余的信息(tweet、display_name、user_name和tweet的创建时间)都成功显示了。
我不知道这是什么意思。我用代码编辑器查找named_route = if model.persisted?
,以为它可能是项目文件中的一行代码,这可能会给予我更好地了解这个错误消息向我发出的信号,但项目中没有这样的行。
不知道这是否相关,但该项目使用devise进行用户身份验证,并使用turbo-links进行即时页面重新加载(这不起作用,但也不会干扰显示)。
该项目在这里找到https://github.com/German-Cobian/Twitter-Rails
,以防您需要更好地了解项目的设计。
任何帮助都非常感谢。
1条答案
按热度按时间pn9klfpd1#
首先使用委托来删除违反得墨忒耳法则的行为:
然后将重复和复杂性从视图中移除到helper* 中:
现在,视图可以用最简单的方式输出标记: