【发布时间】:2018-01-03 06:10:12
【问题描述】:
index.html.erb:
<%= 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 的表格并显示一切正常,现在假设我查询 2017-07-05 之后,它给了我
- SheetsController#index 中的类型错误 不能引用数组
和链接: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'
我该如何解决这个问题?这有什么问题?
【问题讨论】:
-
为什么要把 params[:search] 放在表单中?这就是导致问题的原因。您应该只在控制器内部调用参数(除非您需要从视图中的地址栏中检索一些元素,但这是不好的做法)
-
那我该如何解决呢?
标签: ruby-on-rails