Ruby on rails “错误”;未知密钥;?

Ruby on rails “错误”;未知密钥;?,ruby-on-rails,ruby,postgresql,Ruby On Rails,Ruby,Postgresql,因此,我有一个Rails应用程序,用户可以在其中创建“提交”。现在,我正在尝试为组织添加创建文件夹的功能,在其中提交内容。然而,我似乎遇到了让文件夹模型工作的问题。我得到以下错误: Unknown key: #<ActiveRecord::Relation:0x007f17cc75d498> 我的猜测是,我可能错误地设置了用户、提交和文件夹之间的关系。以下是我的用户和提交模型: submission.rb: class Submission < ActiveRecord::B

因此,我有一个Rails应用程序,用户可以在其中创建“提交”。现在,我正在尝试为组织添加创建文件夹的功能,在其中提交内容。然而,我似乎遇到了让文件夹模型工作的问题。我得到以下错误:

Unknown key: #<ActiveRecord::Relation:0x007f17cc75d498>
我的猜测是,我可能错误地设置了用户、提交和文件夹之间的关系。以下是我的用户和提交模型:

submission.rb:

class Submission < ActiveRecord::Base

belongs_to :folder
belongs_to :user


attr_accessible :content, :title, :user_id


end
你知道会出什么问题吗?这是我第一次遇到这个错误,所以我不确定我犯了什么错误

编辑 以下是用于文件夹和提交的Schema.rb表:

create_table "folders", :force => true do |t|
  t.string   "title"
  t.datetime "created_at", :null => false
  t.datetime "updated_at", :null => false
end

create_table "submissions", :force => true do |t|
  t.string   "title"
  t.text     "content"
  t.datetime "created_at", :null => false
  t.datetime "updated_at", :null => false
  t.integer  "user_id"
end
编辑2 我的创建文件夹迁移:

class CreateFolders < ActiveRecord::Migration
def change
  create_table :folders do |t|
    t.string :title

  t.timestamps
end
class CreateFolders
结束 结束

这是我的添加文件夹\u id\u到\u提交迁移文件:

class AddFolderIdToSubmissions < ActiveRecord::Migration
  def change
  end
end
class AddFolderIdToSubmissions
您有一些可能(或可能没有)导致此异常的打字错误:

# app/models/folder.rb
class Folder < ActiveRecord::Base
    has_many :submissions, :order => ('updated_at DESC') # note the `:` prior to `order` (denotes a symbol)
end

# app/models/user.rb
class User < ActiveRecord::Base
    has_many :folders, :through => :submissions
    # or `has_many :folders, through: submissions`
end
确保在运行迁移后重新启动服务器,以便将新内容加载到您的环境中

更新

要生成将文件夹id显式添加到提交的迁移,请运行以下命令:

rails generate migration AddFolderIdToSubmission folder_id:integer

然后,运行rake db:migrate
并重新启动。

问题在于您在这一行中使用了简单的单词
order
,而不是
:order

has_many :submissions, order => ('updated_at DESC')

order
是一种返回
ActiveRecord::Relation
,想想
文件夹。order(:id).
的方法。您正试图将返回的对象用作散列中的键。这就是您看到的错误。

通过讨论确定,问题是提交表没有
文件夹id
列。Tom生成了一个空迁移,用于将
文件夹\u id
添加到Submissions表,因此得到了一个ActiveRecord::Relation错误

在生成一个新的迁移,将文件夹id添加到Submissions表中后,Tom称错误已经解决


查看更多信息。

您是否将
user\u id
folder\u id
列添加到提交表中?正如您上面所看到的,我确实为此执行了迁移(是的,我随后使用了rake db:migrate)。我需要进入迁移并添加/修改任何代码吗?现在我从Postgres收到错误消息,这使我认为文件夹id仍然没有添加到提交表:PG::error:error:column submissions.folder\u id不存在“folders”上的第1行:…ers“internal JOIN”submissions“。id=”提交人…^:从“文件夹”中选择“文件夹”。*从“文件夹”内部加入“提交”。“id”=“提交”。“文件夹id”中的“提交”。“用户id”=2我是否需要登录到我的Postgres数据库并添加文件夹id列?不,不必这样做。您可以发布您的模式(只是相关的表)以及迁移文件中的实际代码吗?感谢您帮助清理这些文件!没修好,但让我更靠近了。现在我得到了一个Postgres错误,这使我相信文件夹id没有被添加到提交表中。PG::Error:Error:column submissions.folder_id不存在第1行:…ers“文件夹”上的“内部联接”submissions“。id“=”submissio…^:从“文件夹”中选择“文件夹”。*从“文件夹”内部加入“提交”。“id”=“提交”。“文件夹id”中选择“提交”。“用户id”=2不确定我是否需要登录到我的Postgres数据库以进行这些更改,或者我可以通过迁移进行更改。如果可能,您应该通过迁移进行数据库修改。您可以通过从命令行运行
rails控制台
并键入
Submission
来验证
folder\u id
列是否存在。如果
文件夹\u id
已正确迁移,它将显示为模型的属性。看起来它没有正确迁移。我将使用迁移文件中的代码更新我的帖子。您是否尝试过按照我的回答运行
db:migrate:up
class AddFolderIdToSubmissions < ActiveRecord::Migration
  def change
  end
end
# app/models/folder.rb
class Folder < ActiveRecord::Base
    has_many :submissions, :order => ('updated_at DESC') # note the `:` prior to `order` (denotes a symbol)
end

# app/models/user.rb
class User < ActiveRecord::Base
    has_many :folders, :through => :submissions
    # or `has_many :folders, through: submissions`
end
rake db:migrate:down VERSION=20130710042650
rake db:migrate:up VERSION=20130710042650 # runs 20130710042650_add_folder_id_to_submissions.rb
rails generate migration AddFolderIdToSubmission folder_id:integer
has_many :submissions, order => ('updated_at DESC')