Рельсы двух соединенных моделей в одном виде - PullRequest
0 голосов
/ 07 февраля 2012

Предположим, у нас есть модель 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

Но в представлении текстовая область для текстов песен исчезлаполностью ...

Я хочу иметь возможность редактировать название песни и текст в одной форме, это возможно?

Спасибо

Ответы [ 2 ]

3 голосов
/ 07 февраля 2012

Попробуйте изменить: lyric в fields_for, потому что имя поля в таблице не текст, а текст

<% f.fields_for :lyric do |child_form| %>
  <%= child_form.label :lyrics %><br />
  <%= child_form.text_field :lyrics %>
<% end %>
0 голосов
/ 07 февраля 2012
<%= child_form.label :lyric %><br />
<%= child_form.text_field :lyric %>

Должны быть оба :lyrics во множественном числе , а не :lyric

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...