强制/手动输入后更新URL中的参数

时间:2015-06-10 15:35:45

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4

我目前正在使用Devise用户系统来设置与TutorProfile模型Tutor has_one :profile相关联的模型Profile belongs_to :tutor。因此,tutor_id外键将每个简档条目与教师条目相关联。

Profile模型中,我有通常的Rails REST方法neweditshowcreateupdate。< / p>

通过URI profile#edit访问/profiles/:id/edit时,无论在网址中输入的代码是什么,都可以对配置文件的相应Tutor模型进行正确的修改,但URL似乎有点尴尬,不能反映这一点。

因此,如果:id tutor和个人资料tutor_id: 2已登录,请通过id: 2edit以某种方式访问​​/profiles/4/edit操作产生与访问正确的URL /profiles/afjsdjfdsj/edit相同的结果,并仍然会更新导师的正确配置文件。

我想要做的是更新地址栏中的网址以反映个人资料/profiles/2/edit。我尝试在我id: 2的{​​{1}}方法中使用redirect_to无效:

edit

这是profiles_controller.rb

ProfilesController

这是routes.rb

#app/assets/controllers/profiles_controller.rb
def edit
    ...
    @profile = current_tutor.profile
    if @profile.id != params[:id]
        redirect_to edit_profile_path(@profile.id)
    end
    ...
end 

1 个答案:

答案 0 :(得分:0)

经过多次挫折后,我发现params[:id]返回一个字符串而不是一个整数,因此需要to_i来比较这两个。

正确的代码:

#app/assets/controllers/profiles_controller.rb
def edit
    ...
    @profile = current_tutor.profile
    if @profile.id != params[:id].to_i   # convert params[:id] to an integer value
        redirect_to edit_profile_path(@profile.id)
    end
    ...
end