【问题标题】:How to render a template with URL params & anchor properly如何正确渲染带有 URL 参数和锚点的模板
【发布时间】:2014-12-22 04:40:24
【问题描述】:

在控制器中,我需要为另一个控制器/动作对呈现模板。基本上发生的事情是我有一个RequestController 和它创建的create 操作,将工作传递给另一个控制器来处理付款。如果支付不成功,需要将用户带回create模板重试。

复杂之处在于我不能只渲染create 模板,因为用户建议的表单位于页面底部并且通常是隐藏的。我需要在页面底部(锚点)呈现模板,并使用一个 URL 变量指示不应隐藏表单(show=true)。

类似这样的:

render "staticpages/#{params[:page_name]}?show=true#rent"

问题是当我这样做时,我得到了错误:

Missing template staticpages/outdoors?show=true#rent

所以我尝试像这样传递必要的变量:

render "staticpages/#{params[:page_name]}", anchor: "rent", show: "true"

但这也没有用,有什么想法吗?

【问题讨论】:

  • 在写答案之前我想问几个问题。尝试这样的事情:在控制器 A 中创建一个 create.js.erb 文件,其中执行创建操作。然后在那个其他控制器的视图里面做这样的事情:<%= link_to "", purchase_path, :data => { :'class' => 'displayLink' }, :remote => true %> 然后从控制器 A 渲染视图
  • @Observer 对不起,你能再说一遍吗?我有点迷路了……
  • @james 如果您发布所涉及的控制器操作的完整代码,那将非常有用。 render 不会接受任何 URL 参数或锚点,因此您需要以不同的方式进行。
  • 你为什么要在“staticpages”目录下的文件中做一些动态的事情?

标签: ruby-on-rails-4 view rendering render


【解决方案1】:

当我必须更改控制器上的布局时,我喜欢做的是:

class UserController < ApplicationController
  layout :choose_layout
  ... 
  def choose_layout
    if condition
      'layout/a'
    else
      'layout/b'
    end
  end
end

这样我可以在满足条件时更改布局

【讨论】:

    【解决方案2】:

    根据@sjaime 的评论,render 不能接受这样的变量,这更容易......我只是不知道大声笑

    我所做的一切都设置好了

    @error = true
    render "staticpages/#{params[:page_name]}"
    

    然后在视图中,使用JS:

    if ('<%= @error =>' === 'true' ) {
      // show something
      // scroll to something
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-16
      • 1970-01-01
      • 1970-01-01
      • 2015-05-08
      • 1970-01-01
      • 2015-02-02
      • 2014-06-22
      • 1970-01-01
      相关资源
      最近更新 更多