我在rails中的架构清楚地表明我的列名为" position"。
create_table "tasks", force: true do |t|
t.integer "subject_id"
t.string "name", limit: 50
t.string "permalink", limit: 20
t.integer "position"
t.string "due_date"
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "tasks", ["permalink"], name: "index_tasks_on_permalink", using: :btree
add_index "tasks", ["subject_id"], name: "index_tasks_on_subject_id", using: :btree
我在我的sorted
模型中添加了一个名为Task
的lambda:
scope :sorted, lambda {order("subjects.position ASC")}
我的控制器很基本;我只完成了第一个定义。
class TasksController < ApplicationController
layout false
def index
@tasks = Task.sorted
end
现在我的index.html.erb看起来很完美,即使我还没有完成底部的链接(因为那不是错误所说的)。
<table>
<tr class="header">
<th>ID</th>
<th>Subject ID</th>
<th>Task</th>
<th>Permalink</th>
<th>Paragraphs</th>
<th>Actions</th>
</tr>
<%=@tasks.each do |t|%>
<tr>
<td><%=t.position%></td>
<td><%=t.subject_id%></td>
<td><%=t.name%></td>
<td><%=t.permalink%></td>
<td class="center"><%t.paragraphs.size%></td>
<td class="actions">
<%=link_to("Show", {:action => 'show', :id => t.id}, :class => 'action show')%>
<%=link_to("Edit", {:action => 'edit', :id => t.id}, :class => 'action edit')%>
<%=link_to("Delete", {:action => 'delete', :id => t.id}, :class => 'action delete')%>
</td>
</tr>
<%end%>
</table>
我的浏览器上的错误显示为Mysql2::Error: Unknown column 'subjects.position' in 'order clause': SELECT tasks.* FROM tasks ORDER BY subjects.position ASC
,并突出显示<%=@tasks.each do |t|%>
。有人可以解释一下。
答案 0 :(得分:1)
您的范围希望按subjects.position
排序,但您创建了一个名为tasks
的表。
将范围更改为:
scope :sorted, lambda { order('tasks.position') }