-1

我正在尝试创建一个日志,在journal_entries调用索引视图时列出登录用户的日志。

我已经为用户注册、登录/注销身份验证安装了 Devise gem。

我创建了一个模型,JournalEntries其中包括日期、字符串和文本字段。

创建数据库,rake db:create然后迁移后,rake db:migrate我试图在 journal_entries/index 视图中列出用户的日记条目。通过脚手架派生的默认视图列出了 ALL USERS journal_entries。这并不能成为一本出色的日记 - 您可以在其中查看所有其他用户的条目。

在我的研究中,我意识到我在journal_entries表中没有引用用户表的字段。

我在下面创建了一个迁移节目:

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 模型以包含 belongs_to 和 has_many 关联 - 起初我以为这就是我必须做的,并且不知何故数据库会选择它,但它没有......)

这成功地将外键 - user_id 添加到 journal_entries 表中,我以为我很清楚。

现在发生的事情是创建 journal_entry 时 - user_id 列是空白的 - 那里没有填充任何信息......?我通过在本地机器上登录 Postgres 验证了这一点。

任何帮助将不胜感激!

4

2 回答 2

-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 回答
-1

journal_entry 表中 user_id 列为空的原因是因为您需要在创建新的日记条目时添加当前用户的 id。

在您的 JournalEntries 控制器中,您需要将其添加到您的创建操作中:

@journal_entry.user_id = current_user.id

或者,@journal_entry.user = current_user

然后,在您的 JournalEntries Controller 索引操作中:

而不是@journal_entries = JournalEntry.all您可以仅显示当前登录用户的条目@journal_entries = current_user.journal_entries

希望有帮助!

于 2012-12-19T16:53:02.337 回答