0

私のコードはrailscasts #240のものと非常によく似ています

違いは、レール 2.3.10 を使用しているため、「where」を使用していないことです。代わりに、私はserachlogicを使用しており、私のモデルは次のようになります...

//Model.rb
def self.search(search)
      if search
        Model.column_name_like(search)
      else
        find(:all)
      end
    end

(heroku(postgres)にデプロイしているため、大文字と小文字を区別しない必要があるため、検索ロジックを使用しています)

Railscast や他のチュートリアルのようにメソッドをチェーンしようとすると、「メソッドの順序が見つかりません」などのエラーが表示されます

私のコントローラーはここにあります...

 @objects=Model.search(params[:search]).order(sort_order('created_at'))

これは、検索を貼り付ける前に機能していた、わずかに異なる列の並べ替え方法を使用しています。

一部のチュートリアルでこのメソッドが機能するのに、この場合はエラーがスローされるのはなぜですか。チュートリアルが Rails 3 にあるからでしょうか?

4

2 に答える 2

1

数日後、自分で最適な解決策を見つけました。モデルを変更する必要がありました。elseでfind(:all)を返す代わりに、新しい「空の」検索オブジェクトを返しました

@search=Model.column_name_like("")

ソート、検索、ページ付けをサポートするようになった私のモデルとコントローラーを参照してください...

def self.search(search)
      if search
        Model.column_name_like(search)
      else
        @search=Model.column_name_like("")
      end
    end

def index
  @per_page = params[:per_page] || Lease.per_page || 20
  @search=Lease.search(params[:search])
  @objects=@search.find(:all, :order=>(sort_column + " "+ sort_direction)).paginate(:per_page => @per_page, :page => params[:page])
end

private 
def sort_column
  Model.column_names.include?(params[:sort]) ? params[:sort] : "default_column_name"
end

def sort_direction
  %w[asc desc].include?(params[:direction]) ? params[:direction] : "asc"
end

列名と方向を渡すために、ビューに非表示のフォームヘルパーを配置することを忘れないでください。

<p>
<% form_tag leases_path, :method => 'get' do %>
<p>
    <%= text_field_tag :search, params[:search] %>
    <%= submit_tag "Search", :name => nil %>
</p>
<%=hidden_field_tag :direction, params[:direction]%>
<%=hidden_field_tag :sort, params[:sort]%>

<% end %>
于 2011-01-22T15:24:46.817 に答える
0

その railscast は、これが機能しない理由を説明する検索ロジックを使用していないようです。Rail3 の新しい Active Record (Arel) ライブラリを使用して、検索ロジックのような動作を実現しています。

それ以外の:

@objects=Model.search(params[:search]).order(sort_order('created_at'))

試す:

@objects=Model.search(params[:search]).ascend_by_created_at

または:

@objects=Model.search(params[:search]).descend_by_created_at

乾杯

于 2011-01-20T17:40:23.020 に答える