1

私は Sinatra を初めて使用し、テンプレート内のコレクションのクエリがどのように機能するかを理解しようとしています。cこの特定の例では、オブジェクトの特定のコレクション (この例では) に特定の値を持つオブジェクトがあるかどう かを調べようとしています。

<% if c.votes #then filter by an id for example through all of the objects...  %>
    yes, it exists
<% else %>
    nope, doesn't exist
<% end %>

また、私はdjangoのフィルターに慣れています.Sinatraのさまざまなクエリ関数の概要を説明するオンラインの同等のドキュメントはありますか?

4

2 に答える 2

2

それは単なる標準的なコレクションですか?提供されたブロックが一致を見つけた場合に true を返す any? を使用できます。次に、そのブロックで探している値について各オブジェクトをテストします。

<% if c.votes.any? { |a| a.id == whatever } %>
 ...
<% else %>
 ...
<% end %>

それは本当に「投票」が何であるかに依存します。

于 2012-04-09T01:25:55.513 に答える
1

レールでは、これを使用<% if c.votes.present? %>すると便利です。そうしないと、 c.votes が空の配列である場合、条件が true と評価されるためです。

Sinatra には .present? はありませんが、いくつかのオプションがあります:<% unless c.vote.empty? %>または<% if !c.votes.empty %>. どちらのオプションも読みやすさが気に入らないので、現在を追加して再作成しますか? 配列へのメソッド:

class Array
  def present?
    !empty?
  end
end

これを追加する場所は、Sinatra アプリの設定方法によって異なります。1 つのオプションは、メインのアプリ ファイルに直接追加することです。

于 2012-04-09T01:19:37.230 に答える