0

我在 Rails 上有一个非常基本的博客应用程序,我需要帮助来创建一个方法。

对于每个帖子,用户必须指定一个社区,并且出于样式目的,我想知道该社区是否属于某个桶,以便我可以相应地为该帖子着色。例如,邻里“SOMA”是“Downtown”桶的一部分。

我想象我要做的是将邻域传递给一个方法,该方法确定它属于哪个存储桶,并且我可以以某种方式输出存储桶以对应于索引中的 div 类。接受其他建议。

有谁知道这样的方法会在哪里?

更新:

我在 PostsHelper 中添加了一个准系统方法以查看它是否有效,然后我可以充实逻辑

模块 PostsHelper

def bucket(neighbor)
    case neighbor
        when "SOMA"
        puts "Downtown"

        when "Mission"
        puts "Dolores"

        else
        puts "foo"
    end

end

结尾

然后我尝试在帖子索引中调用该方法,但没有任何反应。这可能是有史以来最愚蠢的问题,但我错过了什么?这甚至是正确的方法吗?

<ul id="post-list">
<% @posts.each do |post| %>

<li><%= post.content %></li>
<li><%= post.attribution %> in <%= post.neighborhood %> 
<span class="post-date"><%=time_ago_in_words(post.created_at) %> ago</span></li>
<li> <%= bucket(yield(post.neighborhood)) %> </li> 

<% end %>
</ul>
4

2 回答 2

1

这种方法应该存在于装饰器中。

请参阅此 railscast:http: //railscasts.com/episodes/286-draper


根据您的详细信息进行编辑

def bucket(neighbor)
  case neighbor
  when "SOMA"    then "Downtown"
  when "Mission" then "Dolores"
  else
    "foo"
  end
end

在您看来:

<li> <%= bucket(post.neighborhood) %> </li>

但是你真的应该考虑使用装饰器。

于 2012-09-03T07:34:52.917 回答
0

您可以做的是创建一个资源(表 + 模型,Bucket)来跟踪您关心的存储桶 - 其中 Bucket name 属性可能包含您提到的更大地理区域的名称。然后你可以让 Post 属于 Bucket。

在您看来,您可以使用 post.bucket.name 填充帖子容器的类,然后使用预设颜色等为不同的存储桶名称创建样式。

如果您想提高查询效率:

如果您采用这种方法,请考虑将 Bucket name 属性缓存为 Post 的属性(因此不必在每次呈现视图时都进行额外的查询)。仍然拥有 Bucket 类(而不仅仅是 Post 模型中的 bucket_name 属性)的目的是让您可以规范化 Bucket 名称,并可能自己更新它们。为了确保缓存的 bucket_name 属性在您的 Post 记录中得到更新,您可以在 Bucket 模型中创建一个 after_update 回调,以选择属于该 Bucket 的所有帖子,并更新它们的 bucket_name 属性。

于 2012-09-03T08:01:03.500 回答