Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.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 带模型的轨道布线_Ruby On Rails_Ruby On Rails 3.1_Controller_Routes - Fatal编程技术网

Ruby on rails 带模型的轨道布线

Ruby on rails 带模型的轨道布线,ruby-on-rails,ruby-on-rails-3.1,controller,routes,Ruby On Rails,Ruby On Rails 3.1,Controller,Routes,如何在config/routes.rb文件中使用模型?我想完成的是以下几条路线 match '/:name', :topic => Post.where(:topic => name).first, :to => 'posts#search' 这可能吗?路由到控制器而不是模型。另外,我建议不要将主题选择放在这样的路线上。大多数正确的rails都是在正确的区域做正确的事情 在我看来,标准和基于REST的系统通常是相同的,例如,Posts控制器使用app/views/Posts中

如何在config/routes.rb文件中使用模型?我想完成的是以下几条路线

match '/:name', :topic => Post.where(:topic => name).first, :to => 'posts#search'

这可能吗?

路由到控制器而不是模型。另外,我建议不要将主题选择放在这样的路线上。大多数正确的rails都是在正确的区域做正确的事情

在我看来,标准和基于REST的系统通常是相同的,例如,Posts控制器使用app/views/Posts中的视图管理Post模型的记录,但它们是不同的东西

让路线
/:name
去posts#search是可以的,但是我觉得获取相关主题应该在posts控制器中完成。如果搜索在POST中,您可以在路由上使用嵌套资源,例如:

resources: :topics do
  resources :posts, :member => :search
end

@Michael是对的-不要将数据库代码放在路由文件中。当然,这是可能的,但这确实违背了rails的惯例和原则

更好的办法是:

resources :posts do
  collection { get :search }
end
您的搜索表单如下所示:

= form_tag(search_posts_path, :method => :get) do
  = text_input_tag(:q)
和您的控制器:

def search
  @posts = Post.where("body like ?", "%#{params[:q]}%")
end
<>请注意,您通常也会使用分页(WelePigalPipe或KMaLARI),并且可能想考虑像狮身人面像这样的全文搜索引擎。