2009-12-22 69 views
3

所以我有一個名爲Music的控制器,其中一個動作就是索引。在music/index.html頁面我列出了一堆歌曲(通過歌曲模式),在底部我有一個創建一首新歌曲。Rails在不同的控制器中的渲染動作

宋有驗證,我已經測試,工作得很好。當新樂曲保存在控制器樂曲動作中時,創建I redirect_to => 'music_index_path',這樣人們可以在列表中看到新歌曲。但是當歌曲沒有保存時​​(沒有通過驗證),我不能使用redirect_to,因爲error_messages的形式沒有結轉。我需要使用render,但不能說render :controller => 'music', :action => 'index

我的目標是能夠在music/index.html頁面上顯示歌曲形式的錯誤消息。

我應該如何解決這個問題。我也願意接受其他想法(例如更換控制器)。

謝謝!

回答

2

這聽起來像是音樂應該是宋的一部分,或者相反。您始終可以使用路線將其僞裝成用戶的一種或另一種。 歌曲/索引聽起來像它應該顯示所有歌曲,這是所有音樂無論如何。

+0

我會玩的路線......這可能讓我的地方,我想。 – thomas

0

爲什麼不是一個簡單的request.post?有條件的在索引操作的視圖中,而不是重定向到另一個頁面?

0

你可以嘗試render :file => ...

1

我首先想到的是,我們需要重新考慮這一進程。假設你使用的是RESTful控制器,我不清楚爲什麼你需要一個音樂控制器和一個歌曲控制器......這些資源有什麼不同?下一個相關的問題是,爲什麼通過Song#create顯示錯誤是不夠的?我的意思是,當它只是一個表單時,他們無法做到正確,額外內容的分散可能有助於嗎? :)

這樣說,這裏是一個可能的解決方案。 (既然你沒貼你的代碼,我做了很多假設這裏。)

<hack> 首先,提取歌曲/新歌曲/ _form形式的部分,然後從音樂/索引視圖,render:partial => songs/_form,並且在歌曲控制器中,render:action =>'../music/index'(這被稱爲hackity-hack。)因爲這是一種黑客攻擊,所以您幾乎肯定需要進入音樂#索引並添加@song = Song.new </hack>

+0

資源本身就是一首歌曲,但我不希望網址顯示歌詞...我正嘗試爲婚禮創建歌曲推薦頁面,並且希望讓網址爲/音樂或類似的內容一串歌。進一步思考,我可以添加一個路線地圖/音樂:controller =>'songs',:action =>'index'。 – thomas

1

如果您開始在邊緣運行,the ability to pass a flash through a redirect was just added ...但這並不能真正幫助您。

儘管最簡單的解決方案是您需要呈現索引,但需要設置該頁面所需的所有變量。如果將其分解爲單獨的模塊或方法,則可以從索引操作和保存失敗兩者中調用它。

def index 
    setup_for_index 
end 

def create 
    @song = Song.new(params[:song]) 
    @song.save 
    #... 
    #on failure 
    setup_for_index 
    render :controller => "music", :action => "index" 
end 

def setup_for_index 
    @songs = Song.all 
    #etc 
end 

你可以做的另一件事是使用form_remote_for,並有歌曲形式剛剛更新失敗的股利。然後使用RJS模板返回類型重新載入整個歌曲列表成功。

相關問題