обработка действий контроллера как JS вместо HTML - PullRequest
4 голосов
/ 08 августа 2011

Итак, у меня есть следующая форма:

<%= form_tag url_for(:controller => 'profile', :action => 'follow_topic'), :remote => true do %>
  <%= hidden_field_tag :topic_id, topic_id %>
  <%= content_tag :button, :class => 'link', :onclick => "javascript:document.getElementById('followtopic#{Topic.find(topic_id).identifier}').innerHTML='Following...'" do %> Follow <% end %>
<% end %>

и я пытаюсь заставить контроллер обрабатывать его как JS вместо HTML. Самое смешное, что у меня точно такая же форма в другом месте приложения, которая, кажется, работает нормально, а определения контроллеров те же. Не могу понять проблему. Любые идеи о том, что я должен проверить в первую очередь?

def follow_topic
  @topic = Topic.find(params[:topic_id])
  current_user.follows << @topic
  respond_to do |format|
    format.js
  end
end

Ответы [ 2 ]

0 голосов
/ 01 июня 2013

Этот вопрос СТАРЫЙ, но без ответа, и я часами боролся с той же проблемой, поэтому, надеюсь, это поможет кому-то в будущем.

Убедитесь, что app/assets/javascripts/application.js содержит:

//= require jquery
//= require jquery_ujs 

И этот erb содержит <%= javascript_include_tag "jquery", "jquery_ujs" %>, а не только тег <script>.

Это то, что исправило его для меня.

0 голосов
/ 08 августа 2011

Вы правильно поняли, кроме вашего format.js ничего не делает. Что вы ожидаете в форме отправки? и что вы ожидаете взамен? ответ json или http 200?

укажите, что в вашем format.js вот так:

...
respond_to do |format|
  format.js { render :nothing => true, :response => :ok if current_user.follows << @topic  } 
end
...

или что-то в этом роде.

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