Cómo crear una asociación entre dos modelos de rieles.

Esta es una pregunta para principiantes, pero aún estoy aprendiendo a crear una asociación entre dos modelos en rieles. Tengo un modelo de usuario y un modelo de journal_entry. Las entradas de diario pertenecen al usuario y el usuario tiene muchas entradas de diario. He creado migraciones que se ven así:

class AddJournalEntriesToUsers < ActiveRecord::Migration
  def change    
    add_column :journal_entries, :user_id, :integer
  end
end

class AddIndexToJournalEntries < ActiveRecord::Migration
  def change
    add_index :journal_entries, [:user_id, :created_at]
  end
end

Así es como se ve mi modelo de usuario:

class User < ActiveRecord::Base
  authenticates_with_sorcery!

  attr_accessible :email, :password, :password_confirmation

  has_many :journal_entries, dependent: :destroy

  validates_confirmation_of :password, :message => "should match confirmation", :if => :password
  validates_length_of :password, :minimum => 3, :message => "password must be at least 3 characters long", :if => :password
  validates_presence_of :password, :on => :create
  validates_presence_of :email
  validates_uniqueness_of :email

end

Y así es como se ve mi modelo de journal_entry:

class JournalEntry < ActiveRecord::Base
  attr_accessible :post, :title, :user_id

  belongs_to :user

  validates :user_id, presence: true

  default_scope order: 'journal_entries.created_at DESC'
end

Pero cuando voy a crear una nueva entrada de diario en/journal_entries/new Acabo de recibir un error de validación que dice "El usuario no puede estar en blanco". Por lo tanto, el user_id no se agrega a la entrada de diario aunque haya iniciado sesión y haya una columna user_id en mi db / schema.rb:

create_table "journal_entries", :force => true do |t|
    t.string   "title"
    t.text     "post"
    t.datetime "created_at", :null => false
    t.datetime "updated_at", :null => false
    t.integer  "user_id"
  end

Además, esta es la forma que estoy usando en journal_entries / new para crear la entrada de diario:

<%= form_for(@journal_entry) do |f| %>
  <% if @journal_entry.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@journal_entry.errors.count, "error") %> prohibited this journal_entry from being saved:</h2>

      <ul>
      <% @journal_entry.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :title %><br />
    <%= f.text_field :title %>
  </div>
  <div class="field">
    <%= f.label :post %><br />
    <%= f.text_area :post %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

¿Que me estoy perdiendo aqui? ¿Debo agregar el user_id como un campo oculto en el formulario?

Respuestas a la pregunta(5)

Su respuesta a la pregunta