タイトルの通り、上下の矢印を表示しようとしています。現在 Ruby 2.0 / Rails 4.0 でビルド中
テーブルの列の並べ替えについて Railscasts をフォローしました ( http://railscasts.com/episodes/228-sortable-table-columns ) が、もちろん彼はテーブルを使用しているため、矢印がうまく表示されます。
div/spans/その他を使用したい。(大量のデータではなく、テーブルに入れる必要がある種類のデータではありません。)
そうは言っても、矢印用のアプリケーション ヘルパー メソッドを作成したところ、それらは機能しますが、asc のいずれかをクリックすると、両方の矢印が上向きになります。desc の 1 つをクリックすると、両方とも下向きになります。明らかparams[:direction]
に asc または desc に設定されているため、両方の矢印が設定されます。それらをどのように分離しますか?やや疑似コードで:
if title && asc
sort by title and asc && show up arrow (for title only)
if title && desc
sort by title and desc && show down arrow (for title only)
if date posted && asc
sort by created_by and asc && show up arrow (for date posted only)
etc.
私は巨大な if/then 条件ステートメントを持ちたくありませんが、もっと単純なものが欲しいです。
(プッシュが押し寄せてきた場合、Sort by: セクションにテーブルを使用しますが、それは非常にばかげているように思えます。これは最後の手段です...)
ここに私が持っているコードがあります:
show.html.erb
<h3>Images</h3>
<% if @user.images.any? %>
<div class="sortable"><%= sortable "img_name", "Title" %><%= arrow %> |
<%= sortable "created_at", "Date posted" %><%= arrow %>
</div>
<%= render @images %>
<%= will_paginate @images %>
<% end %>
application_helper.rb
def sortable(column, title = nil)
title ||= column.titleize
css_class = column == sort_column ? "current #{sort_direction}" : nil
direction = column == sort_column && sort_direction == "asc" ? "desc" : "asc"
link_to title, {sort: column, direction: direction}, {class: css_class}
end
def arrow
if params[:direction] == 'asc'
image_tag("arrow_up.png", alt: "up arrow", size: "15x15")
elsif params[:direction] == 'desc'
image_tag("arrow_down.png", alt: "down arrow", size: "15x15")
else
# either a blank image to show or just force no-display of image
end
end
users_controller.rb
def show
@user = User.find(params[:id])
@images = @user.images.paginate(page: params[:page]).order(sort_column + " " + sort_direction)
end
private
def sort_column
Image.column_names.include?(params[:sort]) ? params[:sort] : "created_at"
end
def sort_direction
%w[asc desc].include?(params[:direction]) ? params[:direction] : "asc"
end