我有以下路线的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中获取位置变量并将其添加到链接。
删除定位方法后,它可以正常工作并按预期重定向。我知道我可以通过跳过此操作来解决它,但是我不明白的是,如果它与表单本身无关,为什么它从位置获取值?
最好的解决方法是什么,为什么会发生这种情况?