Как вызвать функцию контроллера из JavaScript с помощью AJAX

0

Привет, я пытаюсь вызвать функцию, которую я написал на моем контроллере из моего javascript, в результате действия, когда я нажимаю кнопку.

Я следил за этой нитью, но это не сработало. Когда я нажимаю на кнопку, я получаю ошибку, указанную ниже:

Started GET "/projects/:id/repository/:branch" for 127.0.0.1 at 2013-11-29 15:03:43 -0200
Processing by RepositoriesController#show as */*
  Parameters: {"id"=>":id", "repository_id"=>":branch"}
  ←[1m←[35m (0.0ms)←[0m  SELECT MAX('settings'.'updated_on') AS max_id FROM 'settings'
  ←[1m←[36mUser Load (0.0ms)←[0m  ←[1mSELECT 'users'.* FROM 'users' WHERE 'users'.'type' IN ('User', 'AnonymousUser') AND 'users'.'status' = 1 AND 'users'.'
id' = 10 LIMIT 1←[0m
  Current user: guilherme.noronha (id=10)
  ←[1m←[35mProject Load (1.0ms)←[0m  SELECT 'projects'.* FROM 'projects' WHERE 'projects'.'identifier' = ':id' LIMIT 1
  Rendered common/error.html.erb (1.0ms)
Filter chain halted as :find_project_repository rendered or redirected
Completed 404 Not Found in 24ms (Views: 21.0ms | ActiveRecord: 1.0ms)

Я не очень хорошо понял, почему я получил эту ошибку, поэтому я здесь, чтобы попросить о помощи.

Подчеркните мой код, чтобы попытаться обнаружить какую-то ошибку или отсутствие чего-то:

_view_button_release.html.erb

<script>
    function CallExec(rep) {
      $.ajax("/projects/:id/repository/:branch");
    }
</script>

<div class="contextual">
<% if User.current.allowed_to?(:exec, @project) %>
    <%= button_to_function l(:gerar_build_project), 'CallExec("'+params[:repository_id].to_s+'")' %>
|
<% end %>
</div>

routes.rb

resources :repositories do
  match 'projects/:id/repository', :action => 'exec_client', :controller => 'repositories', :via => :post
  match 'projects/:id/repository/:branch', :action => 'exec_client', :controller => 'repositories', :via => :post
  get :exec_client, on: :collection
end

client.rb(hook)

module InstanceMethods
  require_dependency 'repositories_controller'
  def exec_client
    begin
      ...
    end
  end
end

Любое предложение?

ОБНОВИТЬ:

Новый журнал

Started GET "/projects/b1309/repository/b1309i11/" for 127.0.0.1 at 2013-12-02 10:38:00 -0200
Processing by RepositoriesController#show as */*
  Parameters: {"id"=>"b1309", "repository_id"=>"b1309i11"}
  ←[1m←[35m (0.0ms)←[0m  SELECT MAX('settings'.'updated_on') AS max_id FROM 'settings'
  ←[1m←[36mUser Load (0.0ms)←[0m  ←[1mSELECT 'users'.* FROM 'users' WHERE 'users'.'type' IN ('User', 'AnonymousUser') AND 'users'.'status' = 1 AND 'users'.'
id' = 10 LIMIT 1←[0m
  Current user: guilherme.noronha (id=10)
Теги:
redmine
redmine-plugins

1 ответ

0

Первый. В коде js

$.ajax("/projects/:id/repository/:branch");

вам нужно вставить вместо :id проекта, а не :branch идентификатор ветки или имя ветки (я не знаю, что ожидает контроллер).

Второй. Вам нужно передать параметры правильно, потому что я не вижу их в журнале. Я вижу params, взятые из url Parameters: {"id"=>":id", "repository_id"=>":branch"}. Как передать параметры через ajax, вы можете google. Например, вы можете проверить jQuery doc и найти примеры.

  • 0
    Я изменил назначения, как вы предложили, но тоже не работает. Несмотря на то, что ошибка исчезла, функция остается без вызова после нажатия кнопки.
  • 0
    что в журнале?
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню