在 routes.rb 文件中,我有:
get 'search' => 'movies#search', as: :search_directors
电影 控制器中的 搜索 操作如下所示:
def search
@movie = Movie.find(params[:id])
# other code
end
其中一个视图包含以下链接:
= link_to 'Find Movies With Same Director', search_directors_path(@movie)
我希望点击此链接时, @movie 对象的ID将通过 params [:id] < 电影#search 操作中的/ em> 。但相反,当我点击它时,Rails会给我这个错误:
MovieController#search
中的ActiveRecord :: RecordNotFound找不到带有&#39; id&#39; =
的电影
我作为参数传递给路由的 @movie 对象有效,因为视图的其他部分工作正常(这是节目)电影URI的.html.haml视图。)
答案 0 :(得分:2)
您需要在路由中指定id,或将其作为附加参数传递(在这种情况下,它将作为GET参数附加到url)。
get 'search/:id' => 'movies#search', as: :search_directors
或(对于GET参数):
= link_to 'Find Movies With Same Director', search_directors_path(id: @movie.id)
在最后一种情况下,您必须在搜索方法中添加一个条件,以测试是否存在params [:id]。
答案 1 :(得分:0)
希望这对你有用......
def search
@movie = Movie.find(params[:id]) # this will raise ActiveRecord::RecordNotFound if id is not available in data base.
# you should use where instead of find
@movie = Movie.where(id: params[:id]).first # this will return nil if not found but not raise ActiveRecord::RecordNotFound Exceptaion.
# other code
end