Jak utworzyć powiązanie między dwoma modelami szyn
To pytanie dla początkujących, ale wciąż uczę się, jak tworzyć powiązania między dwoma modelami w szynach. Mam model użytkownika i model journal_entry. Pozycje dziennika należą do użytkownika, a użytkownik ma wiele wpisów do dziennika. Stworzyłem migracje, które wyglądają tak:
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
Oto jak wygląda mój model użytkownika:
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
Oto jak wygląda mój model 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
Ale kiedy idę do tworzenia nowego wpisu do dziennika pod adresem/journal_entries/new
Mam tylko błąd sprawdzania poprawności, który mówi „Użytkownik nie może być pusty”. Tak więc id_użytkownika nie jest dodawany do wpisu do dziennika, mimo że jestem zalogowany i istnieje kolumna id_użytkownika w mojej 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
Jest to również formularz, którego używam w pliku journal_entries / new do tworzenia wpisu do dziennika:
<%= 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 %>
Czego mi tu brakuje? Czy muszę dodać user_id jako ukryte pole w formularzu?