So erstellen Sie eine Zuordnung zwischen zwei Schienenmodellen

Dies ist eine neue Frage, aber ich lerne immer noch, wie man eine Verbindung zwischen zwei Modellen in Schienen herstellt. Ich habe ein Benutzermodell und ein journal_entry-Modell. Die Journaleinträge gehören dem Benutzer und der Benutzer hat_viele Journaleinträge. Ich habe Migrationen erstellt, die folgendermaßen aussehen:

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

So sieht mein Benutzermodell aus:

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

Und so sieht mein journal_entry-Modell aus:

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

Aber wenn ich gehe, erstelle ich einen neuen Journaleintrag bei/journal_entries/new Ich habe nur einen Validierungsfehler, der besagt "Benutzer darf nicht leer sein". Daher wird die Benutzer-ID nicht zum Journaleintrag hinzugefügt, obwohl ich angemeldet bin und in meiner Datei db / schema.rb eine Benutzer-ID-Spalte vorhanden ist:

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

Dies ist auch das Formular, das ich für journal_entries / new verwende, um den Journaleintrag zu erstellen:

<%= 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 %>

Was vermisse ich hier? Muss ich die Benutzer-ID als verstecktes Feld im Formular hinzufügen?

Antworten auf die Frage(5)

Ihre Antwort auf die Frage