gpt4 book ai didi

ruby-on-rails - 在布局中显示属性之前检查对象是否存在的 Rails 最佳实践

转载 作者:数据小太阳 更新时间:2023-10-29 07:54:26 25 4
gpt4 key购买 nike

我在布局中有以下代码:

Posted <%=time_ago_in_words post.created_at %> ago 
<% if post.has_tag != nil %>
in the <%= post.get_first_tag.name %> category
<% end %>

以及继承自 ActiveRecord::Base 的 post 模型中的以下代码

def has_tag
!self.tags.empty?
end

def get_first_tag
self.tags[0]
end

Tags也是继承自ActiveRecord::Base和Post 'has_many' Tags

首先:这是检查帖子对象是否具有至少 1 个关联标签属性的最佳方法吗。

其次:我是否应该将此逻辑放入辅助方法中?

第三:为什么下面的代码不起作用(它在标签应该出现的地方返回一个#):

in the <%= post.tags.to_sentence %> category, 

我猜是因为标签实际上并没有存储为数组属性,但我真的不知道。


最佳答案

这是检查是否有标签的好方法。但是,self.tags.empty? 将返回 true 或 false,因此 post.has_tag 永远不会为 nil。

值得注意的是,在 ruby​​ 中,通常用问号来命名返回 true 或 false 的方法。所以 post.has_tag? 是您方法的更好名称(例如标签的 empty? 方法)。

这种方法属于模型类而不是辅助方法,因为它不特定于 View 层;例如,您可能想从其他模型类调用此方法。

你得到 # 而不是你的标签名称的原因是你试图将标签集合转换为一个句子,而你需要将标签的名称转换为一个句子。你应该能够做到

post.tags.map(&:name).to_sentence

它将获取标签的名称并将它们变成一个句子。

关于ruby-on-rails - 在布局中显示属性之前检查对象是否存在的 Rails 最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3444905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com