Gre*_*ton 2 validation ruby-on-rails
如果我能以更好的方式做到这一点,我对流程有疑问.我正在使用rails应用程序,并且当certian元素不存在时,我会遇到页面错误.例如,这是我的节目动作
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
Run Code Online (Sandbox Code Playgroud)
我应该使用.present吗?和我一样多吗?有什么更好的东西,如果一个元素不存在,页面不会完全失败?只是尝试以一种能够带来更好代码的方式学习rails.
首先,你为什么不使用关系?如果Article已经有,section_id那么你应该去Section使用@article.section.belongs_to :section应该在你的Article模型中.
以上是真实的Issue,并Author为好.
回答你的问题:不,你不应该.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
Run Code Online (Sandbox Code Playgroud)
没有理由@prev_article = @article.prev_article if @article.prev_article.present?.如果你的观点取决于@prev_article他们将看到有或没有的零值if @article.prev_article.present?..present?无论如何,你的观点将不得不做或类似.
我可能实际上都做掉,但@article这里有我的看法问文章的author, next_article等等.
| 归档时间: |
|
| 查看次数: |
69 次 |
| 最近记录: |