0

私はかなり基本的なブログ アプリをレール上に持っていますが、メソッドの作成に助けが必要です。

投稿ごとに、ユーザーは近隣地域を指定する必要があります。スタイリングの目的で、その近隣地域が特定のバケットに該当するかどうかを調べて、それに応じてその投稿に色を付けることができるようにします。たとえば、近隣「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

この種のメソッドはデコレータに存在する必要があります。

このレールキャストを参照してください: 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

できることは、関心のあるバケットを追跡するリソース (テーブル + モデル、バケット) を作成することです。おそらく、バケット名属性には、言及したより大きな地理的領域の名前が保持されます。次に、Post を Bucket に所属させることができます。

ビューでは、投稿のコンテナのクラスに post.bucket.name を設定し、プリセットの色などを使用してさまざまなバケット名のスタイルを作成できます。

クエリ効率を高めたい場合:

このアプローチを取る場合は、Bucket name 属性を Post の属性としてキャッシュすることを検討してください (ビューがレンダリングされるたびに追加のクエリを実行する必要がなくなります)。Bucket クラスを (Post モデルのbucket_name 属性だけでなく) 保持する目的は、Bucket 名を正規化し、潜在的に自分で更新できるようにすることです。キャッシュされた bucket_name 属性が Post レコードで確実に更新されるようにするには、Bucket モデルに after_update コールバックを作成して、その Bucket に属するすべての Post を選択し、bucket_name 属性を更新します。

于 2012-09-03T08:01:03.500 に答える