2014-09-06 412 views
0
同一頁

形式這是我的情況 我有一個故事控制器具有形式來創建一個新帖子:Rails的渲染

stories.show.erb 
... 
<%=link_to("Create new post",new_story_post_path(@post))%> 

這個新的職位是通過帖子控制器產生

posts\new.erb 
<%= form_for [@story,@post] do |f|%> 

我想擺脫傳統行爲 - 我希望新帖子表單能夠顯示在同一個「故事」頁面內,而不是全頁面重新加載並出現在新頁面中。

什麼是最好的方式來做到這一點在鐵軌?

回答

1

我認爲最好的,如果你添加窗體在你的故事顯示視圖,並使其隱藏,然後當用戶點擊鏈接創建一個新的職位,你可以向他們展示你的形成。

def show 
    @story = Story.find(params[:id]) 
    @post = @story.posts.build # assuming stories have many posts 
end 

#show.html.erb 
... 
<%=link_to "Create a new Post", "#", id: "post-link"%> 

<%= form_for [@story,@post], html: {id: "new-post"} do |f|%> 
    // form fields 
<% end %> 

#some_file.js 
$(document).on("click","#post-link",function(){ 
    $("#new-post").show(); 
}); 

#some.css.scss 
#new-post{display:none;} 
+1

我認爲這是一個很好的解決方案,但JavaScript的應該顯示隱藏的形式,不是鏈接... – 2014-09-06 06:39:07

+0

@Joel_Blum你能解釋爲什麼你認爲javascript應該顯示錶單嗎? – Mandeep 2014-09-06 06:40:16

+0

也許我誤解了你,表單是隱藏的,你設置了一個顯示$(this)的監聽器,它是鏈接到新表單的鏈接(但鏈接已經可見,我們應該顯示隱藏的表單),不是嗎? – 2014-09-06 06:42:21

0

你可以寫:

<%= form_for [@story,@post], remote: true do |f|%> 

在create.js.erb你可以寫

$('#post_block').html("<%= render 'your partial with posts' %>") 
+0

我不需要在這裏的Ajax和OP要顯示新的職位表格而無需重新加載 – Mandeep 2014-09-06 06:13:10