Кнопка_дистанционное обновление
Я пытаюсь использовать помощник button_to для удаленного обновления моей базы данных, хотя у меня есть несколько проблем, когда кажется, что она не передает параметры.
На мой взгляд, я использую
- @availabilities.each do |a|
=button_to 'Accept', { :controller => 'availabilities', :action => :update, :id => a.id, :available => true }, :confirm => 'Are you sure?', :method => :post, :remote => true
и в контроллере
# PUT /availabilities/1
# PUT /availabilities/1.json
def update
@availability = Availability.find(params[:id])
respond_to do |format|
if @availability.update_attributes(params[:availability])
format.html { redirect_to @availability, :notice => 'Availability was successfully updated.' }
format.js
else
format.html { render :action => "edit" }
format.js
end
end
end
консольный вывод
Started POST "/availabilities/2/edit?available=true" for 127.0.0.1 at 2013-02-25 21:43:30 +1100
ActionController::RoutingError (No route matches [POST] "/availabilities/2/edit"):
1 ответ
Решение
Похоже, вы установили маршруты по умолчанию, которые будут соответствовать POST
создать действие контроллера и отклонить любой POST
редактировать данные для обновления существующего объекта.
В коде для вашей кнопки измените метод на PUT
,
=button_to 'Accept', { :controller => 'availabilities', :action => :update, :id => a.id, :available => true }, :confirm => 'Are you sure?', :method => :put, :remote => true
Пример кода после обсуждения комментария
В помощнике у меня есть следующее, что отображается в представлении.
def toggle_admin(user)
if user.is_admin?
button_to "Yes", toggle_admin_path(user), :id => "toggle_admin_#{user.id}", :class => "btn btn-mini toggle-admin", :remote => true
else
button_to "No", toggle_admin_path(user), :id => "toggle_admin_#{user.id}", :class => "btn btn-inverse btn-mini toggle-admin", :remote => true
end
end
Мой файл маршрутов указывает на toggle_admin_path
на контроллер пользовательских настроек, который содержит следующее:
def toggle_admin
@user = User.find(params[:id])
@account = @user.account
if @user.is_admin? && @account.admins > 1
@user.remove_role :admin
else
@user.roles << :admin
end
if request.xhr?
render :status => 200, :content_type => 'text/javascript'
else
redirect_to edit_account_path
end
end