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

时间:2015-05-30 04:35:18

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

我正在使用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;也许这与它有关?

1 个答案:

答案 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