如何在Ruby on Rails中使用数据库字段作为元描述
解决方案:为每篇博文设置唯一元描述
很简单,你只需要调整posts_controller里show方法的代码顺序和赋值逻辑就能实现需求:
修改后的show方法代码
def show @title = 'My Blog' @post = Post.find(params[:id]) # 先获取当前博文的对象实例 # 将@page_description赋值为该博文的summary字段,同时处理空值情况 @page_description = @post.summary.presence || '' @comment = current_user.comments.build if logged_in? end
关键说明:
- 顺序很重要:必须先通过
Post.find(params[:id])获取到对应的@post对象,之后才能调用它的summary属性(也就是数据库里的t.string "summary"字段)。如果先赋值@page_description再获取@post,会抛出undefined method 'summary' for nil:NilClass的错误。 - 处理空值场景:使用
presence || ''是为了避免当某篇博文的summary字段为空时,@page_description变成nil。这样在视图中渲染元描述标签(比如<meta name="description" content="<%= @page_description %>">)时,不会出现content="nil"的尴尬情况,而是显示空字符串。 - 可选:设置默认描述:如果你想在
summary为空时显示一个统一的默认描述,比如"欢迎阅读我的原创博客内容",可以把赋值语句改成:@page_description = @post.summary.presence || '欢迎阅读我的原创博客内容'
内容的提问来源于stack exchange,提问作者Jake
相关产品推荐
相关产品推荐

