2011-02-25 95 views
1

我知道如何在腳手架索引視圖中訪問外鍵屬性。我可以簡單地使用點符號來引用屬性,如property.que.name。鑑於以下型號:如何在jqgrid中顯示外鍵關係數據?

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

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

在索引視圖,我可以做這樣的事情來獲取名稱值:

<td><%=h priority.que ? priority.que.name : "" %></td> 

如何做到這一點的jqGrid的?

我試過,但在jqGrid的回來空:

重點控制器:

@priorities = Priority.find(:all, :order => "position", :conditions => "multitenant_team_id = " + current_user.team.id.to_s) do 
    if params[:_search] == "true" 
    id =~ "%#{params[:id]}%" if params[:id].present? 
    issue_id =~ "%#{params[:issue_id]}%" if params[:issue_id].present? 
    que =~ "%#{params[:que]}%" if params[:que].present? 
    customer =~ "%#{params[:customer]}%" if params[:customer].present? 
    title =~ "%#{params[:title]}%" if params[:title].present? 
    reporting_source =~ "%#{params[:reporting_source]}%" if params[:reporting_source].present? 
    priority =~ "%#{params[:priority]}%" if params[:priority].present? 
    product =~ "%#{params[:product]}%" if params[:product].present? 
    current_owner =~ "%#{params[:current_owner]}%" if params[:current_owner].present? 
    end 
    paginate :page => params[:page], :per_page => params[:rows] 
    order_by "#{params[:sidx]} #{params[:sord]}" 

end 

if request.xhr? 
end 

respond_to do |format| 
    format.html # index.html.erb 
    format.json { render :json => @priorities.to_jqgrid_json(
    [:id, :issue_id, :que.name, :customer, :title, :reporting_source, 
    :priority, :product, :current_owner], 
    params[:page], params[:rows], @priorities.total_entries)} 
    format.xml { render :xml => @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 } 
)%> 

如果我指定闕,而不是闕.name,我將數據返回到網格中,但隊列字段顯示「#」符號我懷疑.to_jqgrid_json調用不喜歡我的語法。

有沒有人試過這個?但願如此。

回答

1

我解決了我的問題。我最終把我的發現改爲find_by_sql,所以我可以在問題表上做一個左外連接。我認爲有幾個問題。我認爲* to_jqgrid_json *有空外鍵值的問題,我無法弄清楚如何以其他方式獲取Que.name。我正在使用SQLServer,因此我必須使用isnull(ques.name,'')將空值轉換爲空值。

所以我代替我的發現如下:

@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來代替它。

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)} 

我的網格看起來不錯!

編輯

我的網格看上去很不錯,但它不分頁或排序。回到繪圖板。 :(

1

好吧,我想我固定它這次是真的。

@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插件喜歡。排序,分頁和搜索現在所有的工作。現在我的網格看起來不錯,實際上工作。