网格视图的自定义过滤器不起作用(两个关联模型)
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
我正在使用 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