Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails:是否可以将';渲染';对于多种方法?_Ruby On Rails_Routes_Render - Fatal编程技术网

Ruby on rails Rails:是否可以将';渲染';对于多种方法?

Ruby on rails Rails:是否可以将';渲染';对于多种方法?,ruby-on-rails,routes,render,Ruby On Rails,Routes,Render,是否可以将渲染方法分组为多个方法 我的情况如下:我的控制器的许多方法共享相同的视图。仅数据更改(数据将用于选择select HTML字段的默认选项)。附言:我知道有更好的方法可以做到这一点(比如使用show方法),但目的是让URL更性感(见下文) 这是为了能够在routes.rb文件中使用匹配: match 'flower', :to => 'objects#flower' match 'car', :to => 'objects#car' ... 因此,为了不重复我自己,我可以为

是否可以将渲染方法分组为多个方法

我的情况如下:我的控制器的许多方法共享相同的视图。仅数据更改(数据将用于选择select HTML字段的默认选项)。附言:我知道有更好的方法可以做到这一点(比如使用show方法),但目的是让URL更性感(见下文)

这是为了能够在routes.rb文件中使用匹配:

match 'flower', :to => 'objects#flower'
match 'car', :to => 'objects#car'
...
因此,为了不重复我自己,我可以为许多方法分组相同的渲染吗


谢谢,

您可以在过滤后使用

after_filter :render_index

def render_index
   render 'index'
end

您可以尝试以下方法:

get ':source', :to => 'objects#index', constraints: {source: /\A(flower|car|etc)\z/}

def index
  @object = send(params[:source]) if params[:source].present?
end

约束源列表非常重要,这样就不允许执行任意方法,但这样可以让您轻松地使用单个路由和单个操作。

谢谢Talgat,但并非所有我的方法都使用相同的渲染文件。因此,当我在方法(例如创建)中指定渲染视图时,我得到了多个渲染错误。您可以使用:only属性,
after\u filter:render\u index,:only=>[:create,:some\u action]
查看此处以了解更多详细信息。不幸的是,它以模板丢失错误结束:缺少模板对象/花,应用程序/花{:locale=>[:en],:formats=>[:html],:handlers=>[:erb,:builder,:coffee,:haml]}!谢谢Chris。我喜欢你建议的解决方案,但应用它会返回500个内部服务器错误:未定义#的方法'flower'。有什么想法吗?使用rake路由返回:GET/:object(:format)object#index{:object=>/(flower | car | cat)/}
get ':source', :to => 'objects#index', constraints: {source: /\A(flower|car|etc)\z/}

def index
  @object = send(params[:source]) if params[:source].present?
end