将模型对象传递给由命名路由生成的链接

时间:2016-06-08 07:19:34

标签: ruby-on-rails routes

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视图。)

2 个答案:

答案 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