Ajax представления с JQuery в рельсах не работает - PullRequest
0 голосов
/ 17 июля 2011

Я пытался внедрить систему комментариев для моего приложения на 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 и веб-разработке в целом и благодарен за любую помощь, чтобы это исправить.

РЕДАКТИРОВАТЬ: Мне удалось возиться и решить проблему.По сути, я следовал решению, предложенному Винсом в дополнение ко вложенным маршрутам, и заставил его работать.Спасибо, ребята.

Большое спасибо, Сид

Ответы [ 2 ]

0 голосов
/ 17 июля 2011

Исходя из вашего комментария к ответу Винча, мне интересно, не могли бы вы упростить для себя ситуацию, правильно вложив ресурсы в ваши маршруты .rb.Измените существующий маршрут событий, чтобы обеспечить блок, например:

resources :events do
  resources :comments, :only [:create]
end

Затем, если ваша форма все еще не работает, попробуйте следующее:

<%= form_for(@comment, :url => event_comments_url(@event), :remote => true) do |f| %>

Таким образом, этоавтоматически подберет: event_id в параметрах как часть поста.

0 голосов
/ 17 июля 2011

Я вижу две вещи прямо сверху.Во-первых, вы не указываете, куда отправляется форма.Таким образом, вам нужно изменить это значение на

<%= form_for @comment, :url => {:controller => :comments, :action => :create}, :remote => true do |f| %> 

    <% if signed_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 %> 

Затем вам нужно добавить соответствующий маршрут в вашу папку routes.rb, т.е.

match "comments/create" => "comments#create"

. Посмотрите, производит ли это что-то новое.Дайте мне знать, и я буду обновлять этот ответ.

Если вы хотите получить хороший учебник по AJAX с комментариями, прочитайте this !

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...