我正在学习rspec和数据库,并拥有一个具有以下架构的电影数据库。我想知道如何通过这项测试,因为我的努力似乎是徒劳的。如果您需要任何其他信息,请告诉我,以防我离开一些有用的东西:
模式
create_table "movies", force: true do |t|
t.string "title", null: false
t.integer "year", null: false
t.text "synopsis"
t.integer "rating"
t.datetime "created_at"
t.datetime "updated_at"
t.integer "genre_id", null: false
t.in
end
create_table "genres", force: true do |t|
t.string "name", null: false
t.datetime "created_at"
t.datetime "updated_at"
end
模型设置:
class Movie < ActiveRecord::Base
validates_presence_of :title
validates_presence_of :year
validates_presence_of :genre
has_many :cast_members
has_many :actors, through: :cast_members
belongs_to :genre
belongs_to :studio
Rspec测试:
it "partially matches movie titles" do
results = Movie.search('Manhat')
expect(results.count).to eq(2)
expect(results.include?(manhattan)).to be_true
expect(results.include?(mystery)).to be_true
end
Rspec测试参数输入:
.create(:movie, title: "Manhattan Murder Mystery"
代码我到目前为止尝试了几种变体:
class Movie < ActiveRecord::Base
等,上面......
def self.search(query)
select('title').where('title ilike ? OR synopsis ilike ?','%query%', '%query%')
end
答案 0 :(得分:1)
您没有将参数传递给查询。您始终在搜索包含“查询”的结果。你应该做的是:
select('title').where('title ilike ? OR synopsis ilike ?',"%#{query}%", "%#{query}%")
这会将"#{query}"
替换为传递给搜索方法的参数。