Предположим, у нас есть модель Lyric:
class Lyric < ActiveRecord::Base
belongs_to :song
end
и модель Song:
class Song < ActiveRecord::Base
has_many :artist, :through => :artistsong
belongs_to :album
has_one :lyric
accepts_nested_attributes_for :lyric #is this needed?
end
Скрипт миграции для песен:
class CreateSongs < ActiveRecord::Migration
def change
create_table :songs do |t|
t.integer :track
t.string :name
t.references :album
t.timestamps
end
add_index :songs, :album_id
end
end
Миграциясценарий к тексту:
class CreateLyrics < ActiveRecord::Migration
def change
create_table :lyrics do |t|
t.text :lyric
t.references :song
t.timestamps
end
add_index :lyrics, :song_id
end
end
И, предположим, у меня есть песня под названием "song 1" с текстами песен, прикрепленными к базе данных.
, поэтому таблица песен:
|id|name |
-------------------------
|1 |song1 |
и таблица текстов:
|id|song_id|lyrics |
---------------------------------
|1 |1 |blahblah |
в методе редактирования song_controller.rb:
# GET /songs/1/edit
def edit
@song = Song.find(params[:id], :include=>:lyric)
end
Это представление для редактирования песни: (после исправления, предложенного Matteo)
<%= form_for(@song) do |f| %>
<div class="field">
<%= f.label :name %><br />
<%= f.text_field :name %>
</div>
<% f.fields_for :song_text do |child_form| %>
<%= child_form.label :lyrics %><br />
<%= child_form.text_field :lyrics %>
<% end %>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
если я это сделаю:
<%= debug(@song.lyric) %>
Я могу видеть содержание текстов:
--- !ruby/object:Lyric
attributes:
id: 1
song_text: hid
song_id: 2
created_at: 2012-02-07 00:59:14.000000000Z
updated_at: 2012-02-07 07:21:57.000000000Z
Но в представлении текстовая область для текстов песен исчезлаполностью ...
Я хочу иметь возможность редактировать название песни и текст в одной форме, это возможно?
Спасибо