我正在使用wice_grid
并且有两个关联的表:组织和用户(具有1:多关系)。对于所有用户的网格视图,我想包括一个列,该列说明用户所属组织的名称(组织模型中的变量)。为此,我定义了一个自定义过滤器,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
无效)。此外,如果我尝试对列进行排序,则页面会在下面给出错误。有关如何定义列/自定义过滤器的任何想法吗?
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'))
用户表中的 organization_id
包含用户所属组织的ID号。 " Gutmann-Stroman 95"是与ID关联的organizationname
。我将friendly_id
用于友好网址,在网址中转换名称中的ID;也许这与它有关?
答案 0 :(得分:1)
但我确实觉得我的说明中的例子也是如此。
错误。该示例指定model: 'Project'
,但您没有。该示例使用联接表的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