【发布时间】:2014-07-06 06:16:42
【问题描述】:
我知道如何对父属性使用 Ransack 很棒的 sort_link 方法,但是当我将相同的逻辑外推到祖父属性的属性时,它不起作用(我可以点击链接,只是没有排序)。
层次结构是这样的:Signup has_many Request has_many Transaction。我正在从 Transaction 的角度进行搜索。
控制器代码:
def index
@q = Transaction.ransack(params[:q])
@transactions = @q.result.includes(:request => :signup)
end
查看代码:
<th><%= sort_link(@q, 'requests.signup.email', "Email") %></th>
<th><%= sort_link(@q, 'requests.pickupdate', "Pick up date") %></th>
<th><%= sort_link(@q, 'requests.returndate', "Returndate") %></th>
顺便说一句,搜索代码(例如,:request_returndate_eq)很好,只是排序不起作用。
型号代码:
class Signup < ActiveRecord::Base
has_many :requests
end
class Request < ActiveRecord::Base
belongs_to :signup
has_many :transactions, dependent: :destroy
end
class Transaction < ActiveRecord::Base
belongs_to :request
end
控制台输出
第一次点击以升序排序(尽管每次点击它总是产生 200 响应,即使视图实际上并没有改变)
Started GET "/admin/transactions?q%5Bs%5D=requests.signups.email+asc" for 127.0.0.1 at 2014-07-07 13:40:16 -0700
Processing by TransactionsController#index as HTML
Parameters: {"q"=>{"s"=>"requests.signups.email asc"}}
Rendered layouts/_flash.html.erb (0.6ms)
(0.4ms) SELECT "transactions"."name" FROM "transactions"
Transaction Load (0.6ms) SELECT "transactions".* FROM "transactions"
Request Load (0.3ms) SELECT "requests".* FROM "requests" WHERE "requests"."id" IN (11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50)
Signup Load (0.1ms) SELECT "signups".* FROM "signups" WHERE "signups"."id" IN (4, 5, 1, 2)
Rendered transactions/index.html.erb within layouts/application (74.3ms)
Completed 200 OK in 85ms (Views: 81.7ms | ActiveRecord: 1.4ms)
【问题讨论】:
-
你可以试试
'requests.signups.email'看看会发生什么。 -
忘了说我试过了,也不管用。顺便说一句,
requests.pickupdate和requests.returndate甚至都不工作 -
能否请您发布您的模型定义。他们三个。
-
代替
includes试试joins -
No也不行
标签: ruby-on-rails ruby-on-rails-4 ransack