-1

journal_entriesインデックス ビューが呼び出されたときに、ログインしているユーザーが一覧表示されるジャーナルを作成しようとしています。

ユーザーのサインアップ、ログイン/ログアウト認証用にDevise gemをインストールしました。

JournalEntries日付、文字列、およびテキスト フィールドを含むモデル を作成しました。

データベースを作成してrake db:createから移行した後、rake db:migrate- journal_entries/index ビューでユーザーのジャーナル エントリを一覧表示しようとしました。スキャフォールディングによって得られたデフォルトのビューは、すべてのユーザーのジャーナルエントリを一覧表示します。これは、他のすべてのユーザーのエントリを見ることができる優れたジャーナルにはなりません。

私の調査ではjournal_entries、users テーブルを参照するフィールドがテーブルにないことに気付きました。

以下の移行ショーを作成します。

class AddForeignKeyToJournalEntries < ActiveRecord::Migration
  def up
    change_table :journal_entries do |t|
        t.references :user
    end
    #add a foreign key
    execute <<-SQL
        ALTER TABLE journal_entries
            ADD CONSTRAINT fk_journal_entries_users
            FOREIGN KEY (user_id)
            REFERENCES users(id)
    SQL
  end

  def down
    execute <<-SQL
        ALTER TABLE journal_entries
            DROP FOREIGN KEY fk_journal_entries_users
    SQL
  end

end

(また、users.rb と journal_entries.rb モデルを変更して、begs_to と has_many の関連付けを含めました。最初は、これだけで十分だと思っていました。データベースはこれを取得するはずでしたが、そうではありませんでした...)

これにより、外部キー - user_id が journal_entries テーブルに正常に追加されました。

現在起こっていることは、journal_entry が作成されたときです - user_id 列は空白です - そこには情報が入力されていません....? ローカル マシンで Postgres にログインして、これを確認しました。

どんな助けでも大歓迎です!

4

2 に答える 2

-1

journal_entryテーブルのuser_id列が空白である理由は、新しいジャーナルエントリが作成されるときに現在のユーザーのIDを追加する必要があるためです。

JournalEntriesコントローラーで、これを作成アクションに追加する必要があります。

@journal_entry.user_id = current_user.id

また、@journal_entry.user = current_user

次に、JournalEntriesControllerのインデックスアクションで次のようにします。

代わりに@journal_entries = JournalEntry.all、現在ログインしているユーザーのエントリのみを。で表示できます@journal_entries = current_user.journal_entries

お役に立てば幸いです。

于 2012-12-19T16:53:02.337 に答える
-1

JournalEntryの新しいインスタンスを作成するときに、現在のユーザーとの関連付けを認識していることを確認する必要があります。

# app/controllers/journal_entries_controller.rb
...
def create
  @journal_entry = current_user.build_journal_entry(params[:journal_entry])
...

Rails Guide for Active Record Associationsの関連部分を参照してください。

于 2012-12-19T16:50:26.820 に答える