Ruby on rails Rails会阻止类似的控制器动作

Ruby on rails Rails会阻止类似的控制器动作,ruby-on-rails,dry,Ruby On Rails,Dry,我有两个独立的控制器,它们继承自Admin::UserBaseController,显示可搜索、可排序的用户表,并使用相同的局部视图 Admin::UsersController-显示给定组织上下文中的用户 Admin::OrganizationsController-显示系统的所有用户 以下是Admin::UsersController的索引方法: def index q = "%#{params[:search]}%" @users = User.where("fir

我有两个独立的控制器,它们继承自
Admin::UserBaseController
,显示可搜索、可排序的用户表,并使用相同的局部视图

  • Admin::UsersController
    -显示给定组织上下文中的用户
  • Admin::OrganizationsController
    -显示系统的所有用户
以下是Admin::UsersController的索引方法:

  def index
    q = "%#{params[:search]}%"
    @users = User.where("first_name like ? or last_name like ? or username like ?", q, q, q).order(sort_column + ' ' + sort_direction).paginate(:page => params[:page])

    respond_to do |format|
      format.html # index.html.erb
      format.json { render :json => @users }
    end
  end
def edit
    @organization = Organization.find(params[:id])
    q = "%#{params[:search]}%"
    @users = @organization.users.where("first_name like ? or last_name like ? or username like ?", q, q, q).order(sort_column + ' ' + sort_direction).paginate(:page => params[:page])
end
q = "%#{params[:search]}%"
@users = @organization.users.search_identity( q ).user_order( sort_column, sort_direction).paginate(:page => params[:page])
以下是Admin::OrganizationsController的编辑方法:

  def index
    q = "%#{params[:search]}%"
    @users = User.where("first_name like ? or last_name like ? or username like ?", q, q, q).order(sort_column + ' ' + sort_direction).paginate(:page => params[:page])

    respond_to do |format|
      format.html # index.html.erb
      format.json { render :json => @users }
    end
  end
def edit
    @organization = Organization.find(params[:id])
    q = "%#{params[:search]}%"
    @users = @organization.users.where("first_name like ? or last_name like ? or username like ?", q, q, q).order(sort_column + ' ' + sort_direction).paginate(:page => params[:page])
end
q = "%#{params[:search]}%"
@users = @organization.users.search_identity( q ).user_order( sort_column, sort_direction).paginate(:page => params[:page])
这两种方法在分配
@users
变量的方式上有很多相似之处。这是
用户
@组织的区别。用户
就是这样。我该如何擦干它?

移动

where("first_name like ? or last_name like ? or username like ?", q, q, q).order(sort_column + ' ' + sort_direction).paginate(:page => params[:page])
在用户界面中创建一个方法

例如:

def self.method_name(q,params)
  where("first_name like ? or last_name like ? or username like ?", q, q, q).order(sort_column + ' ' + sort_direction).paginate(:page => params[:page])
end

然后用这个方法来代替where,所以这里要强调的是范围。这将删除模型中单个位置的重复查询,并使您能够将作用域链接到类和关联上

class User < ActiveRecord::Base
  scope :search_identity, lambda { |identity| where("first_name like ? or last_name like ? or username like ?", identity, identity, identity) }
  scope :user_order, lambda { |column,direction| order("#{column} #{direction}") }
end
在Admin::OrganizationsController中:

  def index
    q = "%#{params[:search]}%"
    @users = User.where("first_name like ? or last_name like ? or username like ?", q, q, q).order(sort_column + ' ' + sort_direction).paginate(:page => params[:page])

    respond_to do |format|
      format.html # index.html.erb
      format.json { render :json => @users }
    end
  end
def edit
    @organization = Organization.find(params[:id])
    q = "%#{params[:search]}%"
    @users = @organization.users.where("first_name like ? or last_name like ? or username like ?", q, q, q).order(sort_column + ' ' + sort_direction).paginate(:page => params[:page])
end
q = "%#{params[:search]}%"
@users = @organization.users.search_identity( q ).user_order( sort_column, sort_direction).paginate(:page => params[:page])

使每件事都简洁明了

望远镜正在改变我的生活。也找到其他地方使用它们。谢谢你的提示。