Пусть мы имеем модель Lyric:Rails две соединенные модели в одной точке зрения
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
Это мнение для редактирования песня: (после исправления, предложенного Маттео)
<%= 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
Но в представлении текстовое поле для лирики исчез полностью ...
I хотите, чтобы иметь возможность редактировать имя песни и лирику в той же форме, возможно ли это?
Благодаря
Добавлен сценарий миграции для текстов и песен – Bill
вы может попытаться изменить название поля, содержащего лирику, в тексте таблицы и использовать новый в полях_for. Может быть, что-то вроде song_text или lyric_text. –
Извините, я первый пользователь ruby, я думаю, что я изменил правильные места. – Bill