2014-09-06 2 views
0

Это мой сценарий У меня есть контроллер Stories, который имеет форму, чтобы создать новое сообщение: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 должен показать скрытую форму, а не ссылку ... –

+0

@Joel_Blum Можете ли вы объяснить, почему, по вашему мнению, javascript должен показывать форму? – Mandeep

+0

Возможно, я вас неправильно понял, форма скрыта, и вы устанавливаете слушателя, который показывает $ (это), который является ссылкой на новую форму (но ссылка уже видна, и мы должны показать скрытую форму), нет? –

0

вы могли бы написать:

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

в create.js.erb вы могли бы написать

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

Мне не нужен Ajax здесь, и OP хочет показать новую форму сообщения без перезагрузки – Mandeep

Смежные вопросы