bjg действительно ответил на это, но я подумал, что я извлеку соответствующую часть и увеличу пример.
Вы просто предоставляете вашему представлению строковую переменную, значением которой является именованный путь Rails, и затем используете это значение в Javascript вашей формы. Пример, который иллюстрирует, как метод контроллера может указать путь для другого метода, который должен быть открыт сценарием при нажатии кнопки:
Файл config/routes.rb
:
...
resource :foo, :only => [:show, :reset]
...
match 'foo_reset_path' => 'foo#reset'
Commanding rake routes
теперь будет производить, помимо прочего, следующее:
foo GET /foo(.:format) foo#show
foo_reset_path /foo_reset_path(.:format) foo#reset
foo_reset_path
- это то, что мы собираемся использовать здесь, но вы, конечно, можете использовать этот метод с любым именованным путем Rails.
Файл app/controllers/foo_controller.rb
:
...
def show
@reset_path = "foo_reset_path" # simply the string you'd use in the
# Rails code for opening the path
...
end
...
def reset
... # reset some variables to their default values
redirect_to foo_path # causes the show method to be called, and the HTML
# page to be redisplayed
end
Файл app/views/foo/show.html.erb
:
...
<input type="hidden" id="reset_path" name="reset_path" value="<%= @reset_path %>">
...
<script>
$(document).ready(function() {
...
/* Hang functionality on the "Reset form" button. */
$('#reset_button').click(function () {
var reset_path = $('#reset_path').val();
window.open(reset_path, "_self")
});
...
})
</script>
Я использую здесь JQuery, но основная идея должна быть ясной. Сценарий добавляет хук к элементу кнопки с идентификатором reset_button
, поэтому при нажатии на кнопку вызывается метод reset
для foo_controller
.