У меня есть приложение Rails с этим маршрутом:
edit_admin_review GET /admin/reviews/:id/edit(.:format) admin/reviews#edit
У меня есть пользовательская форма в Review Show с этим html и контроллером:
<%= form_for @user, url: admin_user_path(@user.id), html: {method: :put}, remote: true do |f| %>
<div class="row">
<%= f.label "Name" %>
<%= f.text_field "name" %>
</div>
.....
<% end %>
Метод обновления Admin User Controller:
def update
@user = User.find(params[:id])
params[:user][:gender] = params[:user][:gender].to_i
@user.update(user_edit_params)
if @user.save
flash[:success] = "User details saved"
redirect_to edit_admin_review_path(@user.reviews.last.id)
else
flash[:alert] = "ERROR: #{@user.errors.messages.first.second.first}"
redirect_to edit_admin_review_path(@user.reviews.last.id)
end
end
В Application Controller у меня есть это:
before_action :location
protected
def location
country = cookies[:country] ||= request.location.country
if country.present?
country = ISO3166::Country[country]
@location = country.translations[I18n.locale.to_s] || country.name
else
@location = "Malaysia"
end
end
По какой-то причине edit_admin_review_path(@user.reviews.last.id)
перенаправляет на этот путь: url.com/admin/reviews/73/Malaysia
... по какой-то причине вместо: id/ edit, он возьмет переменную местоположения из Application Controller и добавит ее к ссылке.
Когда я удалил метод местоположения, он работает хорошо и перенаправляет, как и ожидалось.Я знаю, что, вероятно, могу решить эту проблему, пропустив это для действия, но я не понимаю, почему он получает значение из местоположения, если он не имеет ничего общего с самой формой?
Каков наилучший способобойти и почему это происходит?