Как показать данные отношения внешнего ключа в jqgrid? - PullRequest
1 голос
/ 25 февраля 2011

Я знаю, как получить доступ к атрибутам внешнего ключа в представлении индекса скаффолда.Я могу просто ссылаться на атрибуты, используя точечные обозначения, такие как property.que.name .Для следующих моделей:

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

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

Если я указываю que вместо que.name, я получаю данные обратно в сетку, но в поле Queue отображается символ "#", поэтому я подозреваю, что вызову .to_jqgrid_json не нравится мой синтаксис.

Кто-нибудь пробовал это раньше?Я надеюсь на это.

Ответы [ 2 ]

1 голос
/ 26 февраля 2011

Хорошо, думаю, на этот раз я исправил это по-настоящему.

@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. Сортировка, нумерация страниц и поиск теперь работают. Теперь моя сетка выглядит хорошо и на самом деле работает.

1 голос
/ 26 февраля 2011

Я исправил свою проблему. Я закончил тем, что изменил свою находку на 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 возвращает массив, который прерывает вызов @ priority.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)}

Моя сетка выглядит великолепно!

Редактировать

Моя сетка выглядит отлично, но она не разбивает на страницы и не сортирует. Вернуться к доске для рисования. (

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...