【问题标题】:rails reusing view templates重用视图模板的rails
【发布时间】:2010-08-02 23:37:36
【问题描述】:

这里是 Rails 新手

我的控制器中有 2 个操作 1)索引 2)refine_existing。 它们都以相同的格式显示结果。 如何重用 index.html.erb 文件?

当我尝试以下操作时,它抱怨没有出现细化_existing.erb。

def refine_existing
   ...
  respond_to do |format|
  format.html # index.html.erb
  format.xml  { render :xml => @results }
end

结束

我的索引操作看起来像这样

def index
 #some logic to get @results
 #set some session variables etc.
 respond_to do |format|
  format.html # index.html.erb
  format.xml  { render :xml => @results }
 end
end  

我是否必须重构我的索引视图以包含部分
a) 制作标题
b) 渲染@results 并重复使用它们? 即使 index.html.erb 和 refine_existing.html.erb 看起来完全一样

我有什么办法可以在我的优化现有操作中使用 index.erb 视图吗?

提前致谢

【问题讨论】:

  • # index.html.erb 只是一个评论,供您查看。我不喜欢它,因为剪切和粘贴常见的respond_to do ... end 块很可能会带来错误的文件名以及format.html。如果indexrefine_existing 相同,也许你可以从一个重定向到另一个。
  • 重定向到索引的问题是它重新执行代码以获取索引中的@results并覆盖refine_existing中的记录。

标签: ruby-on-rails views


【解决方案1】:

按照惯例,如果您没有指定模板名称,Rails 会查找与该操作匹配的模板名称。您可以通过使用所需的模板名称显式调用 render 来覆盖它。唯一的问题是路径是相对于 TEMPLATE_ROOT 的,通常是app/views

def refine_existing
   ...
  respond_to do |format|
    format.html { render :template => "<table_name>/index.html.erb" }
  end
end

table_name 替换为模型的“表格化”形式。例如。如果你的控制器是PostsController,那么posts。因此,您的模板将位于 app/views/posts/index.html.erb 中——如果您自定义了路径,可以根据需要进行调整。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 2016-05-26
    • 1970-01-01
    • 2014-03-11
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    相关资源
    最近更新 更多