2016-10-27 4 views
0

Railsを使って "Vinyl Record Collection"アプリをやっています。目標はRuby on Railsの使い方を学ぶことです。Railsを使ってボタンをクリックしてコンテンツを注文する

私は主なアプリが動作しています。私はrails g scaffold record artist:string title:string publisher:string tracks:text year:integerを使用しましたが、すべて正常に動作しています。 私はそれもスタイリングしましたが、素敵な機能を追加する時です;)

レコードリスト(index.html.erb)を異なる方法で並べるためにいくつかのボタンを追加したいと思います。アルファベット順に表示する1つのボタン、レコードタイトルで見て、年ごとに見たい場合は...

しかし、私は実際にそれについてどう考えているのか分かりません。私はGoogleで検索しようとしましたが、私は何を探しているかについてもわかりません。それはsort_byですか?それは並べ替えですか?それはオーダーですか? RailsやjQueryを使ってやるべきでしょうか? =/

私は今年で注文するたとえば、並べ替えを使用して何かを並べ替えることができると思う:

@records.sort! { |a,b| a.year <=> b.year } 

が、どのように私は、変更を表示していますか?ボタンをクリックするだけでどのように動作させるのですか?

クリックしたボタンに応じてビューを更新するにはどうすればよいですか?

私は非常にあなたが私に与えることができますありがとうと思います。

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

答えて

0

は私が書いた@maxコードの多くを使用しています。 少しでも変更して機能させる必要がありました。

私のrecords_controllerに次のコードを使用して終了しました。RB

def index 

    @records = Record.order(:artist) 

    if params[:order] == 'artist' 
     @records = Record.all.order('artist') 
    elsif params[:order] == 'title' 
     @records = Record.all.order('title') 
    elsif params[:order] == 'year' 
     @records = Record.all.order('year') 
    else 
     @Records = Record.all 
    end 

end 

多分これは...いつか他の誰かを助けることができる;)を同時にフレームワークとAjaxを学ぶ

+1

あなたはタイプミスがあります:最後の行の '@ Records'は' @ records' – max

2

.sortまたは.sort_byまたはEnumerableから来るのいずれかの方法を使用すると、パフォーマンスのために非常に悪くなると、メモリの問題につながることができます。

Rubyで並べ替えるには、まずデータベースからすべてのレコードをロードし、それらをメモリにロードしてから配列を並べ替える必要があります。これは、小さなおもちゃのアプリを構築しているときにうまく動作しますが、何千ものレコードを持つアプリでは、すぐにサーバを無理矢理動かすでしょう。

代わりに、あなたはクエリパラメータを使用するクエリをソートや検索、フィルタリングを追加するには.order

@newest = Record.order(year: :desc).limit(100) 
# SELECT records.* FROM records ORDER BY year DESC LIMIT 100 

を使用してデータベースにソートしたいです。レールがリクエストURLからparamsハッシュにクエリパラメータを追加するので、既存のルートを変更する必要はありません。

class RecordsController 
    # ... 
    # GET /index 
    # GET /index?order=[year, artist, title] 
    def index 
    @records = Record.all 
    if params[:order].in? %w[year artist title] 
     # adds ORDER to the scope 
     @records.merge!(Record.order("? DESC", params[:order])) 
    end 
    end 
end 

Should i do it using Rails or using jQuery?

私はあなたがRailsの中に「古典的」同期Webアプリケーションを構築する方法を学ぶことから始め推薦します。それだけで十分です。

ファンダメンタルズを理解したら、再度アクセスしてください。

あなたがどうなる結果をソートするためのリンクを作成するには:答えは

<p>Sort by: 
<%= link_to "Year", records_path(order: 'year') %>, 
<%= link_to "Artist", records_path(order: 'artist') %>, 
<%= link_to "Title", records_path(order: 'title') %> 
</p> 
+0

は、多くの場合、単にサーバが終わるところがわからない混乱につながり、クライアント側のロジックが開始されます。あなた自身を簡単にして、良いレールアプリの作り方を学ぶだけに集中してください。 – max

+0

とよく聞こえますが、実際には多くの意味があります。ありがとう! 私は今、私のアプリでそれを試して、私はエラーが表示されます: "#inに渡されたパラメータは#includeに応答する必要がありますか?"これは何を意味するのでしょうか?私は何かを含める必要がありますか? ai、ai、ai ...これが何を意味するかわからない:/ – Boguz

+0

私はエラーを修正するために '%s [年アーティストタイトル]'を '%w(年アーティストタイトル)'に変更しました。リンクをクリックすると、アドレスバーのアドレスは変更されますが、ビューは変更されません。ビューは同じものを表示します。 – Boguz

関連する問題