0

以前に case ステートメントを使用したことがなく、次のことを行う方法を知りたいと思っていました。

私はいくつかのニュースページを持っており、それぞれが部門に関連する投稿を持っているので、ページは

/tynewyddnews
/woodsidenews
/outreachnews
/sandpipernews

私のホームページでは、これらのそれぞれから最新の投稿を取得して表示しています。

投稿モデル

def self.top_posts
#Array with each of the 4 departments - first record
top_posts = [
  self.tynewydd_posts.first,
  self.woodside_posts.first,
  self.sandpiper_posts.first,
  self.outreach_posts.first
]
#remove entry if nil
top_posts.delete_if {|x| x==nil}
return top_posts
end

たとえば、tynewydd_posts はスコープです

scope :tynewydd_posts, :include => :department, :conditions => {"departments.name" => "Ty Newydd"}, :order => "posts.published_on DESC"

したがって、tynewydd のホームページの投稿を読んでいて /tynewyddnews へのリンクを作成したい場合、または woodside からの投稿を読んで /woodside に link_to したい場合は、ケース ステートメントが役立つかもしれないとアドバイスされていますが、私はパラメータとして何を使用するかわからないので、これまでの私の試みは

def public_news
 case Post.top_posts
  when :tynewydd_posts == 'Ty Newydd'
   link_to('...Read more', tynewyddnews_path)
  when :woodside_posts == 'Woodside'
  link_to('...Read More', woodsidenews_path)
end

終わり

そして、私の見解では、ヘルパーを呼び出すことができます

<%= public_news %>

明らかに惨めな試みです。まず、ケースが設定されているときに変数が設定されている例を見ましたか? 誰かがこれを達成する方法についてアドバイスを与えることができれば、それは大歓迎です

4

1 に答える 1

0

このバリアントを試してください:

def public_news
  path = case
    when Post.tynewydd_posts then tynewyddnews_path
    when Post.woodside_posts then woodsidenews_path
    ...
    else default_path end
  end
  link_to('...Read More', path)
end

when expressionexpressionがtrue に評価されると起動します

于 2013-04-07T21:15:01.240 に答える