Перенаправление Rails для редактирования пути неправильно со значением из контроллера приложения - PullRequest
0 голосов
/ 26 августа 2018

У меня есть приложение 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 и добавит ее к ссылке.

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

Каков наилучший способобойти и почему это происходит?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...