【问题标题】:strange error when making a second query with a search field with Rails使用 Rails 使用搜索字段进行第二次查询时出现奇怪的错误
【发布时间】: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 之后,它给了我

p>
  • SheetsController#index 中的类型错误 不能引用数组

和链接:http://localhost:3000/sheets?utf8=%E2%9C%93&amp;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


【解决方案1】:

你可以试试替换

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

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

它将显示今天的日期作为默认日期。不过,我不太确定占位符..

【讨论】:

  • 但我想使用字段中插入的日期进行搜索
  • 我不使用日期字段,所以不太了解,但基本上它是一个插入日期的字段......你的意思是你想要那个字段中的特定日期?
  • 这行得通,你能告诉我如何将 +24h 添加到日期吗?对于 date_end
  • 这是一个日期字段。没有小时的概念。您想在默认日期上多加一天吗?
  • 没错,所以日期开始时间是 28/07/2017 00:00,日期结束时间是 29/07/2017 00:00,当您不插入小时概念时,默认时间是午夜那天
猜你喜欢
  • 1970-01-01
  • 2018-06-20
  • 2018-05-12
  • 2011-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-16
相关资源
最近更新 更多