我正在创建一个Employees表,并且我想按FULL_RATE_PENCE排序,这是HourlyRate的一个属性。每个员工都有许多小时工资率,这构成了加薪或减薪的历史。问题是试图访问嵌套的HourlyRate,因为我需要访问的HourlyRate在集合中。由于使用了:Includes,因此无法使用.find或.find_by
最初,我收到以下错误:
使用非属性参数调用了危险的查询方法(其参数用作原始SQL的方法):“hourly_rates.first st.ull_rate_pence asc”。不应使用用户提供的值(如请求参数或模型属性)调用此方法。已知的安全值可以通过将它们 Package 在Arel.sql()中来传递。
然后,在使用Arel.sql() Package 部件之后,我收到了下一个错误:
SQlite3::SQLException:没有这样的列:Hourly_rates.Full
模型
class Employee < ApplicationRecord
has_many :hourly_rates
accepts_nested_attributes_for :hourly_rates
end
class HourlyRate < ApplicationRecord
belongs_to :employee
monetize :full_rate_pence, as: 'full'
end
表中的链接
<th scope="col">
<%= sort_link(column: "hourly_rates.first.full", label: "Hourly Rate") %>
</th>
用于创建链接的帮助器方法
def sort_link(column:, label:)
if column == params[:column]
link_to(label, list_employees_path(column: column, direction: next_direction))
else
link_to(label, list_employees_path(column: column, direction: 'asc'))
end
end
控制器法
def list
employees = Employee
.includes(:hourly_rates)
.where(hourly_rates: {active:true})
.order(Arel.sql("#{params[:column]}"))
render(partial: 'employees', locals: { employees: employees })
end
感谢您的建议,我如何才能实现这一点。
丹
1条答案
按热度按时间rkkpypqq1#
Ruby回答:
类似于:
JavaScript排序:
从视野中呼唤: