通过与Scope关联订购用户列表 - Rails 4

时间:2016-04-06 18:02:02

标签: ruby-on-rails-4

我的范围出现语法错误,并且在堆栈溢出时搜索了许多示例,但无法解决它,我们非常感谢您的帮助。

  • 我正在尝试创建一个按公司名称
  • 排序用户列表的范围
  • 有人可以告诉我正确的写作范围的方法,我可以显示用户列表,但按公司名称订购
  

模型

user.rb
belongs_to :company
scope :company_order, ->() { joins(:company).where('company.companyname desc') } 

company.rb
has_many users
  

模式

users
t.string   "name",
t.string   "email",
t.integer  "company_id"

companies
t.string   "companyname",
  

观看档案

<% @users.company_order.each do |user| %>
  <div class="tablerow">
    <div class="tablecell">
      <div>e: <%= link_to user.name, '#' %></div>
      <div>t: <%= link_to user.email.tel, '#' %></div>
    </div>
    <div class="tablecell">
      <div>Company</div>
      <div><%= user.company.companyname %></div>
    </div>
  </div>
<% end %>

我的范围:scope :company_order, ->() { joins(:company).where('company.companyname desc') }并尝试在视图<% @users.company_order.each do |user| %>中调用它,但我收到以下语法错误:

  

错误

SQLite3::SQLException: near "desc": syntax error: SELECT "users".* FROM "users" INNER JOIN "companies" ON "companies"."id" = "users"."company_id" WHERE (company.companyname desc)
  

有人可以告诉我正确的方法来写我的范围   我能够显示用户列表,但按他们的顺序排序   公司名称

1 个答案:

答案 0 :(得分:1)

ORDER不应位于where方法内,而应放在order方法内:

scope :company_order, ->() { joins(:company).order('companies.companyname desc') } 

where用于查询条件,也请注意复数表名。