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?