网格视图的自定义过滤器不起作用(两个关联模型)

Custom filter for grid view not working (two associated models)

我正在使用 wice_grid 并且有两个关联的 table:组织和用户(具有 1:many 关系)。对于所有用户的网格视图,我想包括一个列,其中说明用户所属组织的名称(组织模型中的一个变量)。为此,我定义了一个自定义过滤器,为此 gem 提供了说明 here.

我为网格视图定义了以下列:

g.column name: 'Organization', filter_type: :string, attribute: 'users.organization_id', 
         custom_filter: Organization.all.map{|pr| [pr.id, pr.organizationname]} do |user|
  link_to(user.organization.organizationname, organization_path(user.organization))
end

由此产生的错误信息(参考第一行):

WiceGrid: Invalid attribute name users.organization_id. An attribute name must not contain a table name!

但我确实觉得我完全了解说明中的示例所包含的内容。知道我做错了什么吗?


更新: 如果我将第一行更改为:

g.column name: 'Organization', filter_type: :string, attribute: 'organization_id', 

页面呈现没有错误。但是,此列的过滤器是一个下拉框,而不是字符串的搜索字段(将其更改为 filter_type: :string 无效)。此外,如果我尝试对列进行排序,页面会出现以下错误。关于如何定义 column/custom 过滤器的任何想法?

PG::InvalidTextRepresentation: ERROR:  invalid input syntax for integer: "Gutmann-Stroman 95"
LINE 1: ...OM "users" WHERE (( users.organization_id = 'Gutmann-S...
                                                             ^
: SELECT COUNT(*) FROM "users" WHERE (( users.organization_id = 'Gutmann-Stroman 95'))
用户table中的

organization_id持有用户所属组织的id号。 "Gutmann-Stroman 95" 是与 id 关联的 organizationname。我将 friendly_id 用于友好的 url,它在 url 中转换名称中的 id;也许这与它有关?

But I do feel I've exactly what the example in the instructions also has.

错了。该示例指定 model: 'Project',而您没有指定。该示例使用已加入 table 的 name,而您没有。您的代码尽可能远离示例。另外,您在文档的哪个位置看到 filter_type: :string ?

你应该有类似的东西

g.column name: 'Organization', model: 'Organization', attribute: 'organizationname' do |user|
  link_to(
    user.organization.organizationname, 
    organization_path(user.organization)
  )
end

并且在 initialize_grid 中您需要正确包含您的关联:

yourgrid = initialize_grid(User,
  include:  [:organization]
)

在这里你可以看到一个工作示例:http://wicegrid.herokuapp.com/joining_tables