Ruby on rails 如何在jqgrid中显示外键关系数据?

Ruby on rails 如何在jqgrid中显示外键关系数据?,ruby-on-rails,jqgrid,Ruby On Rails,Jqgrid,我知道如何在scaffold索引视图中访问外键属性。我可以简单地使用点表示法引用属性,例如property.que.name。鉴于以下模型: class Priority < ActiveRecord::Base belongs_to :que ... end class Que < ActiveRecord::Base has_many :priorities ... end 结束 索引视图: <%= jqgrid("Priorities", "prior

我知道如何在scaffold索引视图中访问外键属性。我可以简单地使用点表示法引用属性,例如property.que.name。鉴于以下模型:

class Priority < ActiveRecord::Base
  belongs_to :que
  ...
end

class Que < ActiveRecord::Base
  has_many :priorities
  ...
end
结束

索引视图:

<%= jqgrid("Priorities", "priorities", "/priorities",
[
  {:field => "id", :label => "ID", :width => 35, :resizable => false},
  {:field => "issue_id", :label => "Issue Id"},
  {:field => "que", :label => "Queue"},
  {:field => "customer", :label => "Customer"},
  {:field => "title", :label => "Title"},
  {:field => "reporting_source", :label => "Reporting Source"},
  {:field => "priority", :label => "Priority"},
  {:field => "product", :label => "Product"},
  {:field => "current_owner", :label => "Current Owner"}
],
  { :rows_per_page => 12, :height => 450 }
)%>
“id”,:label=>“id”,:width=>35,:resizeable=>false},
{:field=>“问题id”,:label=>“问题id”},
{:field=>“que”,:label=>“Queue”},
{:field=>“customer”,:label=>“customer”},
{:field=>“title”,:label=>“title”},
{:field=>“reporting_source”,:label=>“reporting source”},
{:field=>“priority”,:label=>“priority”},
{:field=>“product”,:label=>“product”},
{:field=>“当前所有者”,:label=>“当前所有者”}
],
{:每页行数=>12,:高度=>450}
)%>
如果我指定que而不是que.name,我会在网格中获取数据,但队列字段显示“#”符号,因此我怀疑.to_jqgrid_json调用不喜欢我的语法


以前有人试过这个吗?希望如此。

我解决了我的问题。最后,我将find改为find_by_sql,这样我就可以在ques表上执行左外部联接。我认为有几个问题。我认为*to_jqgrid_json*有空外键值的问题,我不知道如何以任何其他方式获取Que.name。我正在使用SQLServer,因此我必须使用isnull(ques.name“”)将null转换为空空间

因此,我将我的发现替换为:

@priorities = Priority.find_by_sql ["select priorities.id id, issue_id, isnull(ques.name,' ') queue_name, customer, title, reporting_source, priority, product, current_owner from priorities left outer join ques on priorities.que_id = ques.id where priorities.multitenant_team_id = ? order by issue_id", current_user.team.id.to_s]
这引入了另一个问题,find_by_sql返回的数组会中断@priorities.total_entries调用。所以我不得不用array.count替换它

我的网格看起来很棒

编辑


我的网格看起来很棒,但它不分页或排序。回到绘图板:(

好吧,我想这次我真的修好了

@priorities = Priority.find(:all,
                        :select => "priorities.id, priorities.issue_id, 
                                        priorities.customer, priorities.title, 
                                        priorities.reporting_source, priorities.priority,
                                        priorities.product, priorities.current_owner,
                                        priorities.position,
                                        isnull(ques.name,' ') queue_name",
                            :joins => "LEFT OUTER JOIN ques ON ques.id = priorities.que_id",
                            :order => "priorities.position", 
                            :conditions => "priorities.multitenant_team_id = " + current_user.team.id.to_s ) do
我知道我可以像这样指定连接。这样可以使结果集保持2dc_jqgrid插件喜欢的格式。现在可以进行排序、分页和搜索所有工作。现在我的网格看起来很好,而且实际上可以工作了

@priorities = Priority.find_by_sql ["select priorities.id id, issue_id, isnull(ques.name,' ') queue_name, customer, title, reporting_source, priority, product, current_owner from priorities left outer join ques on priorities.que_id = ques.id where priorities.multitenant_team_id = ? order by issue_id", current_user.team.id.to_s]
format.json { render :json => @priorities.to_jqgrid_json(
    [:id, :issue_id, :queue_name, :customer, :title, :reporting_source, :priority, :product, :current_owner], 
     params[:page], params[:rows], @priorities.count)}
@priorities = Priority.find(:all,
                        :select => "priorities.id, priorities.issue_id, 
                                        priorities.customer, priorities.title, 
                                        priorities.reporting_source, priorities.priority,
                                        priorities.product, priorities.current_owner,
                                        priorities.position,
                                        isnull(ques.name,' ') queue_name",
                            :joins => "LEFT OUTER JOIN ques ON ques.id = priorities.que_id",
                            :order => "priorities.position", 
                            :conditions => "priorities.multitenant_team_id = " + current_user.team.id.to_s ) do