模型方法无法识别参数

问题描述 投票:0回答:1

我正在构建一个 Rails 应用程序,用户可以在其中搜索“播放列表”,这是一个包含标题、图像和曲目的对象。

我在播放列表模型中定义了一种搜索方法,该方法采用一个参数:“query”。它似乎无法识别何时给出参数,返回“预期 1 个参数,给出 0 个”错误。

播放列表模型(playlist.rb)

class Playlist < ApplicationRecord
  ...

  def self.search_all(query)
    if query
      self.where("title LIKE ?", "%#{search_all}%")
    else
      Playlist.all
    end
  end
end

播放列表控制器(playlists_controller.rb)

class PlaylistsController < ApplicationController

  # GET /playlists or /playlists.json
  def index
    search = params[:search]
    
    if search_all
        @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, :search_all)
    end
end

如何让我的控制器“看到”我添加的参数?

ruby-on-rails ruby model
1个回答
0
投票

您的代码中有一个拼写错误:

self.where("title LIKE ?", "%#{search_all}%")

应该是

self.where("title LIKE ?", "%#{query}%")

因为这是传递给

def self.search_all(query)
的参数名称。

除此之外,我建议研究

ActiveRecord
范围。您可以使用它来简化您的模型和控制器。

# in the model
scope :search, ->(query) { where('title LIKE ?', '%#{query}%') if query.present? }

# in the controller
def index
  @playlists = Playlist.search(params[:search])
end

这在控制器中无需条件即可工作,因为即使在作用域中未调用

ActiveReord::Relation
,作用域也会返回
where
对象(与 finder 类方法相反。

© www.soinside.com 2019 - 2024. All rights reserved.