2013-03-06 4 views
1

У меня есть простое приложение, содержащее сообщение с большим количеством комментариев.Оказание частичного с ajax в Rails 3

Я могу создавать комментарии с сообщений # show в следующей форме.

<%= form_for @comment, :remote => true, :html => {:'data-type' => 'html', :id =>     'create_comment_form' }, :'data-update-target' => 'comments-container'$ 
    <%= f.text_area :content %> 
    <%= f.hidden_field :post_id, :value => @post.id %> 
    <%= f.submit 'Submit', :disable_with => 'Please wait...', :class => 'submit' %> 
<% end %> 

А потом я показываю комментарии с

<div id="comments-container"> 
    <%= render "posts/comments" %> 
</div> 

который петли через @ post.comments.

Можно ли обновить @ post.comments и повторно передать частичное, когда форма отправлена?

ответ

4

В настоящее время вы ничего не делаете из своего действия posts#create? В любом случае, вы хотите вынести create.js.erb (создать этот файл в app/views/posts/) как @jvnill говорит:

def create 
    # do your thang.. 
    respond_to do |format| 
    format.js do 
     # any stuff you want to do when responding to JS 
    end 
    end 
end 

Это будет автоматически оказывать create.js.erb, что должно быть что-то вроде:

$('#comments-container').html('<%= escape_javascript(render "posts/comments") %>'); 

Редактировать - у вас возникла проблема, которую вы описываете с помощью render, потому что вы пытаетесь сделать из актива. Поместите его в свой каталог представлений.

+0

Wokrs как шарм – Artmann

2

Это можно сделать. В create.js.erb, попробуйте

$('#comments-container').html('#{escape_javascript render('posts/comments')}') 

Убедитесь, что все переменные экземпляра вы используете внутри парциальное объявляется.

UPDATE: лучший способ - просто добавить комментарий в конце div.

+0

$ ("# comments-container"). Html ("<% = escape_javascript (render (: partial =>" posts/comments "))%>"); приводит к неопределенному методу 'render 'для # <# : 0x00000003515dd0> – Artmann

+0

Думаю, что я верну комментарии как json и добавлю его, недостатком этого является то, что вы теряете преимущество использования частичного для составление комментариев – Artmann

+0

no вы все еще можете использовать частичное для комментариев. внутри 'posts/comments', используйте частичное отображение каждого комментария, затем используйте это частичное для добавления в div. что касается вашей ошибки, это странно, что вы это понимаете. – jvnill

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