在rails更新方法中重构硬编码链接的最佳方法是什么?

时间:2013-05-31 21:36:25

标签: ruby-on-rails ruby-on-rails-3 controller refactoring

有一些“复杂”路由,什么是清理下面的硬编码链接并使它们成为命名路由的好方法?我在几个位置上有这些构造,并希望将它们从代码中删除。

profiles_controller.rb

  def update

    @profile = Profile.find(params[:id])
    @tags = Session.tag_counts_on(:tags)
    @profile.form = params[:form]
    @match = Match.where(:user_id => current_user.id).first
    authorize! :update, @profile

    respond_to do |format|
      if @profile.update_attributes(params[:profile])
        format.html { redirect_to "/me/#{ current_user.username }/edit/#{ @profile.form }", notice: t('notice.saved') }
      else
        format.html { render action: "/edit/edit_" + params[:profile][:form], :what => @profile.form }
      end
    end
  end

1 个答案:

答案 0 :(得分:2)

您可以通过设置:as属性来创建自己的命名路由。

因此,对于成功的更新重定向,您必须具有类似于`post'/me/:user/edit/:form.format'=>的路线。 '简档#秀'

只需将, :as => :profiles放在路线末尾,您就可以重定向到:profile_path(:user => current_user.username, :form => @profile.form)

路线更改后运行rake routes将为您提供可以使用的命名路线列表。