gpt4 book ai didi

ruby-on-rails - 在 Rails Controller 中过度使用 ".present?"

转载 作者:行者123 更新时间:2023-12-04 03:48:25 24 4
gpt4 key购买 nike

我对流程有疑问,是否可以采取更好的方法。我正在开发一个 Rails 应用程序,当某些元素不存在时,我会遇到页面错误。例如,这是我的表演 Action

def show 
@article = Article.friendly.find(params[:article_slug])
@section_slug = Section.find_by_id(@article.section_id).slug if @article.section_id.present?
@issue_slug = Issue.find_by_id(@article.issue_id).slug if @article.issue_id.present?
@next_article = @article.next_article if @article.next_article.present?
@prev_article = @article.prev_article if @article.prev_article.present?
@article_author = Author.find_by_id(@article.author_id)

render :layout => 'magazine'
session[:return_to] = request.referer
#if request.path != article_path(@article)
#return redirect_to @article, :status => :moved_permanently
#end
end

我应该使用.present吗?和我一样多吗?如果某个元素不存在,是否有更好的方法可以使页面不会完全失败?只是尝试以一种能够产生更好代码的方式学习 Rails。

最佳答案

首先,为什么不使用关系?如果 Article 已经有 section_id 那么您应该使用 @article.section 访问 Sectionbelongs_to :section 应位于您的 Article 模型中。

上述情况也适用于IssueAuthor

回答您的问题:不,您不应该像现在这样频繁地使用 .present?

我将如何编码此操作:

def show 
@article = Article.friendly.find(params[:article_slug])
@section_slug = @article.section.try(:slug)
@issue_slug = @article.issue.try(:slug)
@next_article = @article.next_article
@prev_article = @article.prev_article
@author = @article.author

render :layout => 'magazine'
session[:return_to] = request.referer
end

没有理由 @prev_article = @article.prev_article if @article.prev_article.present?。如果您的 View 依赖于 @prev_article,它们将看到带有或不带有 if @article.prev_article.present? 的 nil 值。您的 View 必须执行 .present? 或类似的操作。

我实际上可能会在这里删除除@article之外的所有内容,并让我的观点询问文章的作者next_article等。

关于ruby-on-rails - 在 Rails Controller 中过度使用 ".present?",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21299397/

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