2016-05-03 13 views
0

現在、私はRailsでそれをぶら下げて一般的なコーディングをしています。したがって私はゲームデータベースからゲームをページの1つに表示し、各関数内で計算された変数でソートする最初のレールアプリを作成しました。私はgame.userexp1またはgame.priceでそれらを注文することができますが、@FinalScore(によってそれらを並べ替えることが可能であるならば、私は把握することはできませんどのように取得sort_byに各関数内の変数を使用する

<% @games.sort_by{|game| ???}.each do |game| %> 

<p>Userexp:  <%= game.userexp1 %></p> 
<p>Userexpscore: <% if (game.userexp1 <= 60) %> <%= @UserexpScore = 1 %> 
       <% elsif (game.userexp1 > 60) %> <%= @UserexpScore = 2 %> = 2 <% end %></p> 

<p>Price:  €<%= game.price %></p> 
<p>Pricescore: <% if (game.price <= 20) %> <%= @PriceScore = 2 %> 
       <% elsif (game.price > 20) %> <%= @PriceScore = 1 %> <% end %></p> 

<p>Finalscore: <%= @FinalScore = @UserexpScore + @PriceScore %></p> 

<% end %> 

:マイビューページには、この(簡体字)のように見えますuserexpscoreとpricescoreをデータベースに入れなくても)。私はこれが可能かどうか疑問に思っていました。

ありがとうございます!

+0

の分離を読むことをお勧め、あなたが何かを言うことができます'<%@ games.sort_by {| game | game [:created_at]}。それぞれdo | game |属性が存在する場合、** created_at **属性でゲームを分類するために、%> 'を使用します。 – aonemd

+0

あなたの素早い応答に感謝しますが、私は本当に各機能を使用して@ Finalscore変数でそれらを並べ替えると思います。これはもちろん可能です。 – Neal

+0

少しリファクタリングする必要があります。答えを具体化する... –

答えて

3

ビューはビジネスロジックにとって適切な場所ではありません。

あなたは例えば、モデルにロジックをスコア算出移動することができます。

class Game < ActiveRecord::Base 
    def userexp_score 
    userexp1 <= 60 ? 1 : 2 
    end 

    def price_score 
    price <= 20 ? 2 : 1 
    end 

    def final_score 
    userexp_score + price_score 
    end 
end 

を表示

<% @games.sort_by(&:final_score).each do |game| %> 
    <p>Userexp: <%= game.userexp1 %></p> 
    <p>Userexpscore: <%= game.userexp_score %></p> 
    <p>Price:  €<%= game.price %></p> 
    <p>Pricescore: <%= game.price_score %></p> 
    <p>Finalscore: <%= game.final_score %></p> 
<% end %> 

に私はあなたがMVCとの懸念

+0

あなたの答えをありがとう!それはトリックでした。そして私はそれから多くを学びました。 – Neal

+0

すてきで清潔な解決策。そこで、メソッドで返された '1'と' 2'をいくつかの定数として指定しようとします。おそらくdbレベルでソートを実行することもできますか? – Sebastian

+0

Symbol#to_procを使用して解を指摘するための親指。 – luizrogeriocn

関連する問題