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 我被告知案例陈述可能会有所帮助,但我不确定使用什么作为参数,所以到目前为止我的尝试是

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当被评估为真时将启动

于 2013-04-07T21:15:01.240 回答