2012-02-07 94 views
0

假設我們有抒情模式:的Rails在一個視圖中的兩個連接的模型

class Lyric < ActiveRecord::Base 
    belongs_to :song 
end 

與宋型號:

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 

假設我有一首名爲「歌曲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 

但在歌詞文本區域完全消失的觀點...

我希望能夠以相同的形式編輯歌曲的名稱和歌詞,這可能嗎?

感謝

+0

添加了歌詞和歌曲的遷移腳本 – Bill 2012-02-07 07:40:17

+0

你可以嘗試更改表格歌詞中包含歌詞的字段的名稱,並在fields_for中使用新名稱。也許像song_text或lyric_text。 – 2012-02-07 07:45:02

+0

對不起,我是第一次使用紅寶石的用戶,我想我改變了適當的地方。 – Bill 2012-02-07 07:54:37

回答

3

試圖改變:抒情的fields_for因爲在表中的歌詞字段的名稱不是歌詞,但歌詞

<% f.fields_for :lyric do |child_form| %> 
    <%= child_form.label :lyrics %><br /> 
    <%= child_form.text_field :lyrics %> 
<% end %> 
+0

非常感謝!得到它的工作: <%= f。fields_for:lyric do | l | %> <%= l.label:song_text%>
<%= l.text_area:song_text%> <% end %> – Bill 2012-02-07 08:17:50

0
<%= child_form.label :lyric %><br /> 
<%= child_form.text_field :lyric %> 

都應該:lyrics複數,不:lyric

+0

有'has_one:lyric'關係 – 2012-02-07 11:43:04

+1

@SandipRansing是的,'fields_for:lyric'已經選擇了'lyric'關聯。 'Lyric'對象有一個名爲'lyrics'的字段,這是需要輸入到'label'和'text_field'助手中的字段。答案是正確的,正如你從接受的答案中看到的那樣。 – meagar 2012-02-07 12:11:34

相關問題