2011-08-11 18 views
0

指定した期間内にデータを検索したいと考えています。私は、名前、場所、start_atとend_atの詳細を持つデータベースを持っています。私はコントローラのfindメソッドを定義して名前と会場を検索できます。以下は私のコントローラコードです。Ruby on Railsでどのように日付範囲を見つけることができますか?

def find 
    @events=Event.find(:all, :conditions=>["venue = ? OR name = ?", params[:search_string], params[:search_string]]) 
end 

次に会場または名前が見つかります。しかし、このコードにstart_atを追加すると例外が返されます。データベースから関連する日付範囲を検索するにはどうすればよいですか?誰でも私を助けることができますか?私はpostgresqlとルビー1.8.7とレール2.3.8のバージョンを使用しています。

次のように文が正常に働いていた場合、私は

def find  
    if (params[:search_string]) 
    @events=Event.find(:all, :conditions=>["venue = ? OR name = ?", params[:search_string], params[:search_string]]) 
    else 
    @events= Event.all(:conditions => ["start_at >= ? AND end_at <= ?", params[:start_at], params[:end_at]]) 
    end 
end               

が最初の...私のfindメソッドを変更しました。それ以外の部分は機能しません。例外はありません。データベースから日付関連のデータを取得することはありません。データを検索しないため、このif文を自分のコードに追加します。誰も私にこの2番目の部分を修正するのを助けることができますか?私は検索テキストボックスに日付を入力します。データは取得されません。

+1

どのような例外がありますか?どのようにしてこのコードにstart_atを追加しましたか? – fl00r

+0

start_atは日付変数です。これをdefとして追加します。 @ events = event.find(:all、:conditions => ["場所=?OR開始_ = ="、params [:search_string]、params [ :search_string] ,, params [:search_string]] end – Rosh

+0

あなたの例のstart_atはDATEではなくSTRINGです。 – fl00r

答えて

0

特定の期間内にデータを検索する方法が見つかりました。私はこれを別々にしました。私は私のレイアウトに2つのtext_field_tagを作成し、以下のようにコントローラコードを作成しました。

def find 
    @events= Event.all(:conditions => ["start_at >= ? AND end_at <= ?", params[:search], params[:search_string]]) 

    end 

次に、次のコードをレイアウトに追加しました。

<span style="text-align: right"> 
    <% form_tag "/events/find" do %> 
    <%= text_field_tag :search%> 
    <%= text_field_tag :search_string %> 
    <%= submit_tag "search" %> 
    <% end %> 
    </span> 

私はこれらの2つを組み合わせたいと思います。日付範囲でデータを検索するには2つのtext_field_tagが必要で、名前でデータを検索するにはtext_field _tagが1つだけ必要です。だから私はこれをどのようにすることができますか?さらにあなたの助けが必要です....

0

http://guides.rubyonrails.org/active_record_querying.html を見てのようなもの試してみる:Railsの2.3.x以降では

@events = Event.where("(venue = ? OR name = ?) AND start_at >= ? AND end_at <= ?", params[:search_string], params[:search_string], params[:start_at], params[:end_at]) 

編集

を、条件が与えられていることを

@events = Event.all(:conditions => ["(venue = ? OR name = ?) AND start_at >= ? AND end_at <= ?", params[:search_string], params[:search_string], params[:start_at], params[:end_at]]) 

お知らせする必要があります配列として。

+0

それは動作していない...再び私は例外がある。未定義のメソッド 'where 'for# Rosh

+0

この例外はどのようにポストするのですか? :) – socjopata

+0

ええ、@ Octopus-PaulはあなたにRails 3.xの例を与えました – socjopata

関連する問題