【问题标题】:Rails Autocomplete Using Instance Method?Rails 使用实例方法自动完成?
【发布时间】:2015-08-22 08:36:44
【问题描述】:

我正在运行 Rails 4,使用 rails-jquery-autocomplete gem - 我已经连接了所有东西,因此它可以很好地自动完成有 :name 列的模型。

我正在苦苦挣扎的是如何自动完成 name 它是一个实例方法。我有一个看起来像这样的模型:

class Roster < ActiveRecord::Base
  belongs_to :practice
  belongs_to :role
  belongs_to :compensation_type

  def name
    self.practice.name + ' - ' + self.role.role_type.name + ' (' + self.role.name + ') - ' + self.compensation_type.name
  end
end

这应该可以很容易地看到我正在尝试做什么 - 在 name 方法上自动完成。

方法本身有效:

2.2.2 :002 > roster1.name
  Practice Load (0.2ms)  SELECT  "practices".* FROM "practices" WHERE "practices"."id" = ? LIMIT 1  [["id", 1]]
  Role Load (0.2ms)  SELECT  "roles".* FROM "roles" WHERE "roles"."id" = ? LIMIT 1  [["id", 1]]
  RoleType Load (0.2ms)  SELECT  "role_types".* FROM "role_types" WHERE "role_types"."id" = ? LIMIT 1  [["id", 1]]
  CompensationType Load (0.3ms)  SELECT  "compensation_types".* FROM "compensation_types" WHERE "compensation_types"."id" = ? LIMIT 1  [["id", 1]]
 => "Test Practice - Role Name Test (Role Type Test) - Test Comp Type"

所以问题似乎是自动完成。表单加载,我可以在控制台中看到抛出了以下错误:

Started GET "/bookings/autocomplete_roster_name?term=Te" for ::1 at 2015-08-22 09:18:32 +0100
Processing by BookingsController#autocomplete_roster_name as JSON
  Parameters: {"term"=>"Te"}
  Roster Load (0.9ms)  SELECT  rosters.id, rosters.name FROM "rosters" WHERE (LOWER(rosters.name) LIKE 'ar%')  ORDER BY LOWER(rosters.name) ASC LIMIT 10
SQLite3::SQLException: no such column: rosters.name: SELECT  rosters.id, rosters.name FROM "rosters" WHERE (LOWER(rosters.name) LIKE 'Te%')  ORDER BY LOWER(rosters.name) ASC LIMIT 10
Completed 500 Internal Server Error in 6ms (ActiveRecord: 1.4ms)

第一个明显的事情是 SQL 完全不同 - 它不是试图将三条信息放在一起并将它们组合起来,它只是在寻找 :name 列。

有没有办法使用自定义实例方法而不是实际列来完成这项工作?我可以让我的实例方法表现得像一个列吗?

为了完整起见,我的表单控制器:

autocomplete :roster, :name

在我的表格上我有:

<%= f.input :roster, as: :autocomplete, url: autocomplete_roster_name_bookings_path, id_element: '#booking_roster_id', input_html: { class: 'form-control' }  %>

非常感谢任何帮助!

【问题讨论】:

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


    【解决方案1】:

    您可以自定义autocomple动作:

    def autocomplete_roster_name 
      # your code here
      result = Model.where('custome query here')
      render json: result.to_json
    end
    

    但是您应该进行选择查询并将其连接到数据库层。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-02
      • 2013-02-17
      • 2015-03-07
      • 2018-05-13
      • 2011-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多