2

したがって、ユーザーが「提出」を作成できるRailsアプリがあります。今、組織のために、提出物が入るフォルダーを作成する機能を追加しようとしています。ただし、フォルダー モデルを機能させる際に問題が発生したようです。次のエラーが表示されます。

Unknown key: #<ActiveRecord::Relation:0x007f17cc75d498>

エラーは、このコードの 21 行目にあることを示しています。

18:                 </div>
19: 
20:                 <div id="submission-list-container">
21:                     <% current_user.folders.each do |i| %>
22:                         <a href='#'>
23:                             <div id="post-container">
24:                                 <%= i.title %> <p id="created-time">Created <%= i.created_at.strftime("%e/%-m") %></p>

を使用してフォルダー モデルを作成しましたrails g model folder title:string。モデルは次のようになります。

class Folder < ActiveRecord::Base
attr_accessible :title, :user_id

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

私の推測では、ユーザー、送信、およびフォルダー間の関係を正しく設定していない可能性があります。これが私のユーザーと提出モデルです:

サブミッション.rb:

class Submission < ActiveRecord::Base

belongs_to :folder
belongs_to :user


attr_accessible :content, :title, :user_id


end

ユーザー.rb:

class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :token_authenticatable, :confirmable,
# :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable

# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me, :user_id,  :submissions, :folders
# attr_accessible :title, :body

has_many :submissions
has_many :folders, through: :submissions

end

また、私の移行ディレクトリは次のようになります。

20130523233304_create_submissions.rb
20130530064506_devise_create_users.rb
20130621002458_add_user_id_to_submissions.rb
20130709213421_add_user_id_to_folders.rb
20130710042650_add_folder_id_to_submissions.rb
20130710200424_create_folders.rb

何が間違っている可能性がありますか?このエラーが発生したのはこれが初めてなので、何をごまかしたのかわかりません。

編集 フォルダーと送信用の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 私の create_folders 移行:

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

  t.timestamps
end

終了 終了

そして、これが私の add_folder_id_to_submissions 移行ファイルです。

class AddFolderIdToSubmissions < ActiveRecord::Migration
  def change
  end
end
4

3 に答える 3

1

folder_idディスカッションを通じて決定されたように、問題は Submissions テーブルに列がないことでした。Tomfolder_idは Submissions テーブルに を追加するために空の移行を生成したため、ActiveRecord::Relation エラーが発生しました。

Submissions テーブルに追加された新しい移行を生成しfolder_id、データベースをかき集め、サーバーを再起動した後、Tom はエラーが解決されたと述べました。

詳細については、DB 移行に関する Rails ガイドをご覧ください。

于 2013-07-10T21:34:43.103 に答える
1

この例外を引き起こしている可能性がある (またはしていない可能性がある) いくつかのタイプミスがあります。

# 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

移行を実行した後、サーバーを再起動して、新しいコンテンツを環境にロードしてください。

更新

送信に明示的に追加する移行を生成するにはfolder_id、次のコマンドを実行します。

rails generate migration AddFolderIdToSubmission folder_id:integer

次に、実行rake db:migrateして再起動します。

于 2013-07-10T20:34:48.547 に答える
1

order問題は、この行で , の代わりに裸の単語を使用することです:order:

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

orderを返すメソッドActiveRecord::RelationですFolder.order(:id)...。返されたオブジェクトをハッシュのキーとして使用しようとしています。これが表示されているエラーです。

于 2013-07-10T21:29:49.840 に答える