Rails重定向使用应用程序控制器中的值编辑路径错误

时间:2018-08-26 15:34:19

标签: ruby-on-rails

我有以下路线的Rails应用程序:

edit_admin_review GET    /admin/reviews/:id/edit(.:format)                                  admin/reviews#edit

我在带有此html和控制器的Review Show中具有用户表单:

<%= 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 %>

管理员用户控制器更新方法:

  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中获取位置变量并将其添加到链接。

删除定位方法后,它可以正常工作并按预期重定向。我知道我可以通过跳过此操作来解决它,但是我不明白的是,如果它与表单本身无关,为什么它从位置获取值?

最好的解决方法是什么,为什么会发生这种情况?

0 个答案:

没有答案