浏览器显示MySQL错误,我没有列

时间:2014-10-03 21:41:54

标签: mysql ruby-on-rails ruby database

我在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|%>。有人可以解释一下。

1 个答案:

答案 0 :(得分:1)

您的范围希望按subjects.position排序,但您创建了一个名为tasks的表。

将范围更改为:

scope :sorted, lambda { order('tasks.position') }