我有2个不同的<?php
$title = 'Home';
$childView = 'views/_index.php';
include('layout.php');
?>
行动,有人可以帮我合并吗?
第一个def索引(对于标签):
index
第二个def索引(针对类别):
def index
if params[:tag]
@posts = Post.tagged_with(params[:tag])
else
@posts = Post.all
end
end
答案 0 :(得分:0)
我使用ransack进行过滤和排序:https://github.com/activerecord-hackery/ransack
它非常容易设置,可以实现您的目标。
答案 1 :(得分:0)
这样的事情会做
def index
if params[:tag].present?
@posts = Post.tagged_with(params[:tag])
elsif params[:category].present?
@category = Category.find_by_name(params[:category])
@posts = @category.posts
else
@posts = Post.all
end
end
答案 2 :(得分:0)
这是一个简短的版本:
def index
@posts =
if params.key?(:tag)
Post.tagged_with(params[:tag])
elsif params.key?(:category)
Post.joins(:categories).where(categories: { name: params[:category] })
else
Post.all
end
end
但是,我想知道这种情况是否真的保证了3种不同的路线和控制器:
# config/routes.rb
resources :categories, only: [] { resources :posts, only: :index }
resources :tags, only: [] { resources :posts, only: :index }
resources :posts, only: :index
然后
# categories_posts_controller.rb
class CategoriesPostsController < ApplicationController
def index
@posts = Post.joins(:categories).where(categories: { id: params[:category_id] })
end
end
等等:
# tags_posts_controller.rb
class TagsPostsController < ApplicationController
def index
@posts = Post.tagged_with(params[:tag_id])
end
end
如果您没有可以使用的id
,则可以将路线中的参数名称更改为您想要的任何名称。
resources :categories, only: [] { resources :posts, only: :index, param: :name }