Этот немного уникален...
У меня есть серия изображений флажков, при нажатии на которые форма отправляется... с использованием следующего Javascript:
$('#pin_rose').simpleImageCheck({
image: '/images/rose.png',
imageChecked: '/images/one.png'
})
.change(function() {
var c = 'checked';
if (!$('#pin_rose').is(':checked')) {
$(this).closest('form').submit();
}
$(this).closest('form').submit();
});
Однако я бы хотел, чтобы форма отправлялась с использованием ajax в среде rails 3, чтобы страница не перезагружалась...
В моем партиале _edit.html у меня есть следующее:
<%= form_for([@posts, @pin], :html => {:multipart => true}, :remote => true) do |f| %>
В моем контроллере pins_controller.rb у меня есть:
def update
...
respond_to do |format|
if @pin.update_attributes(params[:pin])
format.html { redirect_to @post }
format.js
else
format.html { redirect_to '/static_pages/login' }
format.js
end
...
end
Затем в моем update.js.erb у меня есть
$("#new_pins").append("<h1>new pin added</h1>")
Проблема в том, что когда я нажимаю на изображение, форма отправляется и данные добавляются, но она перенаправляется, а не использует ajax.
Есть ли способ заставить rails переопределить вызов $(this).closest('form').submit();
Javascript, чтобы он не отправлялся как html?
Я знаю, что мог бы сделать стандартный вызов ajax в Javascript, но предпочел бы этого не делать, так как мне нужно будет вытаскивать объекты в будущем («добавлен новый пин-код» только сейчас).
ОБНОВЛЕНИЕ: Запущены рейк-маршруты...
users POST /users(.:format) users#create
new_user GET /users/new(.:format) users#new
user GET /users/:id(.:format) users#show
post_pins POST /posts/:post_id/pins(.:format) pins#create
new_post_pin GET /posts/:post_id/pins/new(.:format) pins#new
edit_post_pin GET /posts/:post_id/pins/:id/edit(.:format) pins#edit
post_pin PUT /posts/:post_id/pins/:id(.:format) pins#update
posts POST /posts(.:format) posts#create
new_post GET /posts/new(.:format) posts#new
edit_post GET /posts/:id/edit(.:format) posts#edit
post GET /posts/:id(.:format) posts#show
PUT /posts/:id(.:format) posts#update
login /login(.:format) static_pages#login
about /about(.:format) static_pages#about
/posts(.:format) posts#new
ВТОРОЕ ОБНОВЛЕНИЕ
Основная проблема в том, что $('#myform').submit();
отправляется как html. Есть ли способ изменить это так, чтобы он вместо этого переходил на format.js? Я также пробовал это безрезультатно:
<%= f.check_box :rose, :onchange => '$(this.form).submit();' %>