Сообщение jQuery для Rails
Моя настройка: 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
, предполагающий, что мне нужно передать некоторые параметры формы, например say photo_id
и т.д. Предположим, что у меня есть способ получить доступ к значениям для params, что синтаксис для 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
Вы можете настроить свое сообщение, чтобы структурировать данные каким-либо образом, если они правильно интерпретируются на конце рельсов, но лучше всего иметь объект "имя модели" со всеми значениями.
Javascript
$.ajax({
url: "/sub_comments",
type: "POST",
data: {subcomment: {
field: val,
field2: val, etc... }},
success: function(resp){ }
});
Рельсы
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