如何在Rails模型方法中访问控制器的params[:tab]参数
解决方法:将tab参数显式传递给模型方法
模型的类方法无法直接访问控制器的params参数(这是MVC架构的设计原则,模型应保持独立,不依赖请求上下文),你需要把tab作为参数传递给search_my_work方法,具体步骤如下:
1. 修改模型的类方法,接收tab参数
更新Activity模型中的search_my_work方法,让它接受一个tab参数:
def self.search_my_work(tab) if tab == 'overdue' # 执行overdue对应的逻辑 else # 执行其他标签页的逻辑 end end
2. 在控制器中调用方法时传入tab参数
在Activities控制器的对应action里,先处理并校验params[:tab]的合法性,然后将其传入模型方法:
# 先校验tab的有效值,避免非法参数 valid_tabs = ['active', 'inactive', 'overdue'] current_tab = params[:tab].presence_in(valid_tabs) || 'active' # 给个默认值,比如active # 调用模型方法并传入参数 @activities = Activity.search_my_work(current_tab)
这样就能解决NameError问题,同时也符合Rails的MVC设计规范,让模型方法更通用、可复用。
内容的提问来源于stack exchange,提问作者Solitary Coder
相关产品推荐
相关产品推荐

