Rails应用:Playlist模型search_all方法无法识别参数的解决
解决Rails Playlist搜索方法参数错误问题
模型(playlist.rb)的错误修正
原代码里的search_all方法在拼接LIKE查询条件时,错误引用了方法名search_all而非传入的query参数,同时判断逻辑可以更严谨。
修正后的模型代码:
class Playlist < ApplicationRecord ... def self.search_all(query) if query.present? self.where("title LIKE ?", "%#{query}%") else Playlist.all end end end
- 用
query.present?替代if query,避免空字符串触发搜索逻辑 - 将
%#{search_all}%改为%#{query}%,正确使用传入的搜索参数
控制器(playlists_controller.rb)的错误修正
- index方法中
if search_all会直接调用模型类方法但不传参数,这正是"expected 1 parameter, 0 given"错误的根源,应改为判断search参数是否存在 playlist_params不需要包含:search_all,因为search是独立的请求参数,不属于Playlist的资源属性
修正后的控制器代码:
class PlaylistsController < ApplicationController # GET /playlists or /playlists.json def index search = params[:search] if search.present? @playlists = Playlist.search_all(search) else @playlists = Playlist.all end end ... private # Only allow a list of trusted parameters through. def playlist_params params.require(:playlist).permit(:title, :image) end end
额外注意
确保前端搜索表单的输入框name属性为search,而非嵌套在playlist[search]中,这样参数才能正确传入params[:search]。如果后续需要扩展搜索范围(比如图片、音轨相关字段),可以在where条件中添加更多匹配规则,例如:
self.where("title LIKE ? OR track_name LIKE ?", "%#{query}%", "%#{query}%")
内容的提问来源于stack exchange,提问作者Jillian Hoenig
相关产品推荐
相关产品推荐

