2016-09-18 5 views
1

内のコードを繰り返すことは、どのように私はHAML /レールと、この作品のようなものを作ることができます。HAML/Railsの4:条件 -

- if current_user.is_seeking_job == true && current_user.is_seeking_contract == true 
    - @jobsforyou.where.not(user_id: current_user, is_finished: true, is_active: false).where("sort < ?", 2).limit(10).each do |job| 
- else 
    - @jobsforyou.where.not(user_id: current_user, is_finished: true, is_active: false).where("sort > ?", 1).limit(10).each do |job| 
    %li 
明らか

私は最初のループの内部には、コードを持っていないので、私はエラーを取得します。 事は私がこれらの2つ以上の条件を持っており、%liの内部が多くのコードです。

もちろん、各条件ごとにコピーするだけで済みますが、同じコードを何度も何度もコピーせずに、どうすればできますか?

ありがとうございました!

+0

この質問は、ここではなく[CodeReview](http://codereview.stackexchange.com/)に適しています。コードのより完全なバージョンを投稿することをお勧めします。潜在的に重要な情報が欠けているとアドバイスするのは難しいです。 –

+0

投稿したコードに基づいて、わかりやすいことは、無駄なループを完全に削除することです。あなたがなぜそれを行うことができないのかを明確にすることができれば、より有益な答えが得られるかもしれません。 –

+0

@ Gugubaightこのロジックはコントローラで処理する必要があります。そのような条件をビューに追加することは非常に悪い習慣です。 – Aamir

答えて

3

次のような何かができる:

- if current_user.is_seeking_job && current_user.is_seeking_contract 
    - sort_order = "sort < ?" 
    - sort_param = 2 
- else 
    - sort_order = "sort > ?" 
    - sort_param = 1 
- @jobsforyou.where.not(user_id: current_user, is_finished: true, is_active: false).where(sort_order, sort_param).limit(10).each do |job| 

しかし、この解決策はseparation of concerns principleの違反である - あなたのビューは(理想的には)専用データベースを照会ない、データを表示する必要があります。モデルメソッドやスコープのように、クエリと関連ロジックをどこか適切な場所に移動することをお勧めします。

+0

ありがとう!あなたの答えに基づいて私のコントローラにこれを追加しました:-) – Gugubaight

関連する問題