0

我们的 rails 3.2.12 应用程序中有一个view_hanlder方法。它被定义为:

   def view_handler
      index  = params[:index].to_i
      url = params[:url]
      msg = params[:msg]
      #redirect to the page by url  
      if msg.nil?                                                         
        redirect_to url
      else
        redirect_to url, :notice => msg
      end 
    end

view_handler这是我们视图中的 link_to 调用:

<%= link_to 'Project Status', "/view_handler?index=1&url=#{misc_definitions_path(:for_which => 'project_status', :subaction => 'project_status')}" %>

然而在 中view_handlerparams[:url]是:

params[:url] = "/misc_definitions?for_which=project_status"

不知何故subaction=project_status在运输途中丢失了。在视图中构造链接以便两者都可以传递给 view_handler 的正确方法是for_which什么subaction

谢谢您的帮助。

4

1 回答 1

1

请考虑在您的视图中使用它(或者更好的是,为部分或全部创建一个助手):

<% misc = misc_definitions_path(:for_which => 'project_status', 
                                :subaction => 'project_status')
%>
<%= link_to 'Project Status', "/view_handler?index=1&url=#{CGI::escape(misc)}" %>

基本上,由于&之前subaction没有被转义,Rails 将其解释为参数的view_handler一部分而不是url参数的一部分。

通过在您的视图中转义url参数,它将作为单个参数出现在 Rails 中,并且不会被分解。

于 2013-05-04T02:26:12.250 回答