2017-07-27 8 views
0

index.html.erbに検索フィールドを持つ2番目のクエリを作る:奇妙なエラーRailsの

<%= form_tag(sheets_path, :method => "get", id: "search-form") do %> 
     <%= date_field :search, params[:search], placeholder: "Procurar sheets" %> 
     <%= submit_tag "Procurar", :name => nil,class: "button" %> 
     <% end %> 

sheets_controller.rb:

def index 
    @sheets = Sheet.where(user_id: current_user) 
     if params[:search] 
      @sheets = Sheet.search(params[:search], current_user.id) 
     else 
      @sheets = Sheet.where(user_id: current_user) 
     end 
end 

sheet.rb:

def self.search(search, userid) 
    date_start = search 
    date_end = '2017-07-27T00:00:00'#hardcoded, for now, implement date_start +24h later 
    self.where("user_id =" + userid.to_s).where("inicio > ?", date_start).where("inicio < ?", date_end) 
end 

私は最初のクエリを言う:2017-07-03それは私にstart_dateが> 2017-07-03より大きいシートを与え、それをすべてok、n http://localhost:3000/sheets?utf8=%E2%9C%93&search%5B%5B%222017-07-03%22%5D%5D=2017-07-05

とコンソール:

Processing by SheetsController#index as HTML 
    Parameters: {"utf8"=>"✓", "search"=>{"\"2017-07-03\""=>"2017-07-05"}} 
    User Load (1.0ms) EXEC sp_executesql N'SELECT [users].* FROM [users] WHERE [users].[id] = @0 ORDER BY [users].[id] ASC OFFSET 0 ROWS FETCH NEXT @1 ROWS ONLY', N'@0 int, @1 int', @0 = 7, @1 = 1 [["id", nil], ["LIMIT", nil]] 
Completed 500 Internal Server Error in 6ms (ActiveRecord: 1.0ms) 



TypeError (can't quote Array): 

app/models/sheet.rb:7:in `search' 
OWそれは私に がアレイ

とリンク引用することはできませんSheetsControllerの#インデックス内

  • はTypeErrorを与える、のは、私が後2017-07-05を照会しましょう

    どうすればこの問題を解決できますか?これは何が間違っていますか?

+0

あなたのフォームにparams [:search]を入れたのはなぜですか?これが問題の原因となっています。コントローラ内でのみparamsを呼び出す必要があります(ビュー内のアドレスバーからいくつかの要素を取得する必要はありませんが、悪い習慣です)。 – Maxence

+0

どうすれば修正できますか? –

答えて

0

あなたはそれがデフォルトの日付と今日の日付が表示されます

<%= date_field_tag(:search, Date.today)%> 

<%= date_field :search, params[:search], placeholder: "Procurar sheets" %> 

を交換してくださいすることができます。私はプレースホルダーについて確信が持てません。

+0

しかし、私はフィールドに挿入された日付で検索したい –

+0

私は日付フィールドを使用しないので、私はそれらをあまり知らないですが、基本的にそれは日付を挿入するフィールドです...あなたは、そのフィールドの日付? – Maxence

+0

これはうまくいきました。日付に+ 24時間を追加する方法を教えてください。 date_endの場合 –