dポイントプレゼントキャンペーン実施中!

検索結果で表示されたリストを、並べ替えができるようにしたいです。
現在はリンク先をクリックしても、実装できていません。
どこのコードがおかしいのかご教授いただければ幸いですm(_ _)m

=======================
views
=======================
<%= link_to "安い順", :action => 'low' %>
<%= link_to "高い順", :action => 'high' %>

<% @products.each do |product| %>
商品名<%= product.code %>
金額<%= product.price %>
<% end %>
=======================
controller.rb
=======================
def check
@product = Product.all
  render :action => 'check'
end


def low
@products = Product.find(:all, :order => "price ASC")
render :action => 'check'
end

def high
@products = Product.find(:all, :order => "price DESC")
render :action => 'check'
end

ご教授よろしくお願い致します。

A 回答 (3件)

すみません。

#2の回答も的外れでした。
viewの@productsに正しい値が設定されていないのは、
def check
@product = Product.all
  render :action => 'check'
end

@product = Product.allが原因です。
これを
@products = Product.all
として下さい。(@productを@productsにする)

尚、view側も見やすくするために
===================================
<%= link_to "安い順", :action => 'low' %>
<%= link_to "高い順", :action => 'high' %>
</br>               ・・・ここに改行をいれる
<% @products.each do |product| %>
商品名<%= product.code %>
金額<%= product.price %></br>  ・・・ここに改行をいれる
<% end %>
===================================
とすると良いかと思います。
    • good
    • 0
この回答へのお礼

ご教授ありがとうございます。

def checkを修正して実装できました。
>@product = Product.allが原因です。

お手間をおかけしまして、すみません。
ありがとうございました。


@products = Product.order("price")
@products = Product.order("price DESC")

お礼日時:2011/08/15 22:02

すみません。

#1の回答は的外れでした。
@products = Product.find(:all, :order => "price ASC")

@products = Product.order('price ASC')
は同じ結果が得られますので、ソートの指定が誤っているわけではないようです。
(今後は、後者を推奨します)

こちらで、viewをその通りに作成し、実行したところ
NoMethodErrorが発生しましたので、それが原因かと思います。
view側を以下のように修正してください。
==================================
<%= link_to "安い順", :action => 'low' %>
<%= link_to "高い順", :action => 'high' %>
<% if @products %> ・・・・・・・この行を追加
<% @products.each do |product| %>
商品名<%= product.code %>
金額<%= product.price %></br>   ・・・本質的な部分ではないが見やすくするために</br>を追加
<% end %>
<% end %> ・・・・・・この行を追加
===============================
@products になにも設定されていない場合は、表示しないように変えました。
    • good
    • 0

以下のようにしてください。


@products = Product.find(:all, :order => "price ASC")

@products = Product.order('price ASC')

@products = Product.find(:all, :order => "price DESC")

@products = Product.order('price DESC')

rails3.x では、このような書き方に変わっています。
Product.find(:all, :order => "price DESC")の書き方は、
rails2.xの記述方法なので、現在は非推奨になっています。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!