ruby-on-rails - 提供重构代码(过滤方法)
问题描述
我写了一个函数来过滤我网站上的条目,但它看起来很麻烦。而且我确信这段代码可以写得更简单、更简单,我将非常感谢任何帮助。下面是函数本身。
def search
if current_user.tutor?
if params[:subject_id] == ""
@help_requests = HelpRequest.all.order(created_at: params[:direction] == "1" ? :desc : :asc)
else
@help_requests = HelpRequest.where("subject_id IN (?)", params[:subject_id]).order(created_at: params[:direction] == "1" ? :desc : :asc)
end
respond_to do |format|
format.js {render}
end
else
@help_requests = HelpRequest.list_of_request params:[subject_id]
respond_to do |format|
format.js {render}
end
end
end
解决方案
为了避免你写两次,你可以将两个语句移到语句respond_to do |format|
之外if
:
def search
if current_user.tutor?
if params[:subject_id] == ""
@help_requests = HelpRequest.all.order(created_at: params[:direction] == "1" ? :desc : :asc)
else
@help_requests = HelpRequest.where("subject_id IN (?)", params[:subject_id]).order(created_at: params[:direction] == "1" ? :desc : :asc)
end
else
@help_requests = HelpRequest.list_of_request params:[subject_id]
end
respond_to do |format|
format.js {render}
end
end
另一件要尝试的事情是缩短@help_requests = HelpRequest
到help_requests
这个:
def search
if current_user.tutor?
if params[:subject_id] == ""
help_requests.all.order(created_at: params[:direction] == "1" ? :desc : :asc)
else
help_requests.where("subject_id IN (?)", params[:subject_id]).order(created_at: params[:direction] == "1" ? :desc : :asc)
end
else
help_requests.list_of_request params:[subject_id]
end
respond_to do |format|
format.js {render}
end
end
private
def help_requests
@help_requests = HelpRequest
end
推荐阅读
- ruby-on-rails - 530-5.5.1 需要验证。在 on rails 应用程序上了解更多信息
- c++ - 来自不同进程的线程可以具有相同的 id 吗?
- matlab - 如何在 semilogx 图中有不同的背景颜色?
- r - 饼图ggplot:文字方向和图形不同
- c - 堆栈上的本地存储
- swift - 无法在原型单元中为视图创建插座
- redis - twemproxy中的mget和pipeline有什么区别?
- angular - Angular material 2 mat-spinner 奇怪的变换 Safari 缩放级别 90% 或更低
- java - Java中的本地时间到UTC
- ansible - 告诉 Ansible 到 elm init