Я пытался внедрить систему комментариев для моего приложения на Rails.Каждое событие в моем приложении имеет свою страницу, а на странице есть ветка комментариев.Я хочу, чтобы пользователи могли оставлять комментарии, используя ajax.Я пытался следовать RailsCast 136, и это то, чем я хочу заниматься в своем приложении.Однако всякий раз, когда я публикую комментарий, запрос ajax не выполняется, и я получаю сообщение об ошибке:
Начинается POST "/ events / undefined" для 127.0.0.1 в 2011-07-17 00:39:16 -0400
ActionController :: RoutingError (Нет совпадений с маршрутом "/ events / undefined"):
Вот код моего действия show в моем events_controller.
def show
@event = Event.find(params[:id])
@comment = Comment.new
session[:event_id] = @event.id
@comments = @event.comments.reverse
end
Вот код для моей формы комментария в моем представлении события.
<% = form_for (@comment,: remote => true) do | f |%> <% if sign_in?%>
<% = f.label: author%><% = f.text_field: author,: value => current_user.name%>
<% else%>
<% = f.label: author%><% = f.text_field: author%>
<% end%>
<p><%= f.label :content %><br />
<%= f.text_field :content %></p>
<p><%= f.submit %></p> <% end %> </div>
Вот код моего действия по созданию в моем comments_controller.
def create
@comment = Comment.create!(params[:comment])
@comment.event_id = session[:event_id]
session[:event_id] = nil
flash[:success] = "Comment sent!"
respond_to do |format|
format.html { redirect_to @comment.event }
format.js
end
end
Вот код jQuery для публикации с помощью ajax.Это в значительной степени совпадает с кодом, изложенным RailsCast 136
jQuery.ajaxSetup ({'beforeSend': function (xhr) {xhr.setRequestHeader ("Принять", "text / javascript")}})
$ (документ) .ready (function () {$ ("# commentform"). Submit (function () {$ .post ($ (this) .attr ("action"),$ (this) .serialize (), null, "script"); вернуть false;})})
Кто-нибудь знает, что может пойти не так?Я очень новичок в Rails и веб-разработке в целом и благодарен за любую помощь, чтобы это исправить.
РЕДАКТИРОВАТЬ: Мне удалось возиться и решить проблему.По сути, я следовал решению, предложенному Винсом в дополнение ко вложенным маршрутам, и заставил его работать.Спасибо, ребята.
Большое спасибо, Сид