Rails 4:按列名称获取数据Rails错误

时间:2014-08-04 07:19:47

标签: ruby-on-rails ruby ruby-on-rails-4

我想根据某些搜索字符串从db中获取数据。但我得到了例外

undefined method `find_all_by_client_name' for ...

有人可以告诉代码的问题是什么吗?

@workout_schedules = WorkoutSchedule.find_all_by_client_name(params[:search_string])

以下是工作日程序的架构

ActiveRecord::Schema.define(version: 20140804052924) do

  create_table "workout_schedules", force: true do |t|
    t.string   "client_name"
    t.string   "trainer"
    t.integer  "duration_mins"
    t.date     "date_of_workout"
    t.decimal  "paid_amount"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

end

1 个答案:

答案 0 :(得分:3)

在Rails 4.1中,find_by_<column_name>find_all_by_<column_name>方法已被删除。

在4.1发行说明中:

  

删除activerecord-deprecated_finders作为依赖项。请参阅   宝石README了解更多信息。

您可以使用where

获得所需的结果
@workout_schedules = WorkoutSchedule.where(:client_name => params[:search_string])

我强烈建议where超过find_by。在基于属性的查找程序中,会对查询施加额外的overhead

如果你想使用这些发现者,仍然如此。您可以使用 activerecord-deprecated_finders gem重新获得搜索功能。

干杯!

修改

如果您想按多列搜索,可以使用where,如下所示:

search_string = params[:search_string]
@workout_schedules = WorkoutSchedule.where(["trainer = ? OR client_name = ?", search_string, search_string])