0

私はRailsが初めてです。Ryan Bates のソート可能なテーブル列コード (Railscast #228) のようなものをレガシー データベースに実装しようとしています。私の質問は「関連付けられたモデルの列でRailsデータベーステーブルをソートする」と非常に似ていますが、そこの回答に基づいて解決できないようです。

テーブル (クラス Ent) 内の、udtidつまり. 各プロジェクトがいくつかの ent 行に一致するという点で、追加の考慮事項があるため、 where に一致するようにスコープを設定する必要があります。entityudfstorageproject.ent.udtident.rowindex != 0

モデル:

class Project < ActiveRecord::Base
has_many :ent, :foreign_key => "attachtoid"
has_many :samples, :foreign_key => "projectid"

class Ent < ActiveRecord::Base
set_table_name("entityudfstorage")
belongs_to :project, :foreign_key => "attachtoid"
scope :rowindex, where('entityudfstorage.rowindex != ? ', "0")

プロジェクト インデックス ビュー:

    <tr>
    <th><%= sortable "name", "Name" %></th>
    <th><%= sortable "projecttype", "Project Type" %> </th>
    </tr>
    <tr>
    <td><%= project.name %></td>
    <td><%= project.ent.rowindex.first.udtid %></td>
    </tr>

プロジェクト コントローラー

def list
@projects = Project.order(sort_column + " " + sort_direction)
end

関連するフィールド project.ent.rowindex.first.udtid でソートする projecttype の「sort_column」に何を入れることができるかを理解しようとしています (コントローラーで「name」が機能するのと同じ方法) project.name でソートします)。

のプロジェクトにスコープを入れてみた

 scope :by_udtids, Project.joins("left join ent on projects.projectid = ent.attachtoid").where('ent.rowindex != ?', 0).order("ent.udtid DESC")

そして、プロジェクトコントローラーでこれを試しました。

if sort_column == "projecttype"
@projects = Project.by_udtids
else
@projects = Project.order(sort_column + " " + sort_direction)

その結果、プロジェクト インデックス ページの列に適切なデータが表示されますが、[プロジェクト タイプ] リンク ヘッダーをクリックすると並べ替えられません (一方、[名前] リンク ヘッダーをクリックすると、サーバー端末に表示されるログは両方のクリックで同じであり、クエリは正しいようです..

Started GET "/projects?direction=asc&sort=projecttype" for 128.208.10.200 at 2013-08-29 07:47:52 -0700
Processing by ProjectsController#index as HTML
Parameters: {"direction"=>"asc", "sort"=>"projecttype"}
Project Load (1.5ms)  SELECT "project".* FROM "project" ORDER BY name asc
Ent Load (0.4ms)  SELECT "entityudfstorage".* FROM "entityudfstorage" WHERE "entityudfstorage"."attachtoid" = 602 AND (entityudfstorage.rowindex != '0' ) LIMIT 1
CACHE (0.0ms)  SELECT "entityudfstorage".* FROM "entityudfstorage" WHERE "entityudfstorage"."attachtoid" = 602 AND (entityudfstorage.rowindex != '0' ) LIMIT 1
(0.3ms)  SELECT COUNT(*) FROM "sample" WHERE "sample"."projectid" = 602 
Ent Load (0.3ms)  SELECT "entityudfstorage".* FROM "entityudfstorage" WHERE "entityudfstorage"."attachtoid" = 603 AND (entityudfstorage.rowindex != '0' ) LIMIT 1
CACHE (0.0ms)  SELECT "entityudfstorage".* FROM "entityudfstorage" WHERE "entityudfstorage"."attachtoid" = 603 AND (entityudfstorage.rowindex != '0' ) LIMIT 1
(0.2ms)  SELECT COUNT(*) FROM "sample" WHERE "sample"."projectid" = 603

Rendered projects/list.html.erb within layouts/admin (478.7ms)
Completed 200 OK in 487ms (Views: 398.7ms | ActiveRecord: 87.9ms)
[2013-08-29 07:55:27] WARN  Could not determine content-length of response body. Set content-   length of the response or set Response#chunked = true

Started GET "/assets/jquery.js?body=1" for 128.208.10.200 at 2013-08-29 07:55:28 -0700
Served asset /jquery.js - 304 Not Modified (0ms)
[2013-08-29 07:55:28] WARN  Could not determine content-length of response body. Set content-   length of the response or set Response#chunked = true

洞察に感謝します!

4

1 に答える 1