JQuery пост в Rails - PullRequest
       2

JQuery пост в Rails

15 голосов
/ 30 августа 2011

Мои настройки: Rails 3.0.9, Ruby 1.9.2, jQuery 1.6.2

У меня есть форма, которая показывает несколько фотографий и комментариев для пользователя, и я хочу реализовать встроенное комментирование.

<div id="newsfeed">    
 <div> 
 <div class="photo_title">Summer 2011</div> 
 <div class="newsfeed_photo"> 
 <a href="..." /></a> 
 </div> 
 <textarea class="comment_box">Write a comment...</textarea>  
</div> 
<div> 
 <div class="comment_title">Seeing a movie</div> 
 <textarea class="comment_box">Write a comment...</textarea>  
</div> 

Я хочу отправить сообщение AJAX, когда пользователь нажмет клавишу ввода в поле textarea.Вот javascript (неполный), который у меня есть до сих пор

  $('#newsfeed').delegate('.comment_box', 'keydown', function (event){
    event.preventDefault();
    $.post('/sub_comments', ...);
  });

Я использую метод delegate, поскольку содержимое <div id='newsfeed'> может быть заменено другим вызовом AJAX.Мне нужен синтаксис для метода jQuery post, предполагающий, что мне нужно передать некоторые параметры формы, такие как скажем photo_id и т. Д. Предположим, у меня есть способ доступа к значениям для параметров, каков синтаксис для postвызов создания параметров так, как их ожидает Rails

Вот стандартные биты Rails

sub_comments_controller.rb

  def new
    @sub_comment = SubComment.new

    respond_to do |format|
      format.html # new.html.erb
      format.js
    end
  end

Также я не хочу использовать обычный <%= form_for(@sub_comment, :remote => true) do |f| %> для каждого встроенного комментария, который я мог быдобавлять.Я также взглянул на railscast Райана Бейтса, но код выглядит устаревшим.

1 Ответ

31 голосов
/ 30 августа 2011

Вы можете настроить свою публикацию так, чтобы структурировать данные любым способом, если они правильно интерпретируются на конце рельсов, но лучше всего иметь объект 'имя-модели' со всеми значениями.

Javascript

$.ajax({
    url: "/sub_comments",
    type: "POST",
    data: {subcomment: {
             field: val, 
             field2: val, etc... }},
    success: function(resp){ }
});

Rails

def create
  @sub_comment = SubComment.new params['subcomment']
  if @sub_comment.save
    render :json => { } # send back any data if necessary
  else
    render :json => { }, :status => 500
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...