【问题标题】:Ruby on Rails : non-resourceful route working,but haml page failsRuby on Rails:非资源性路由工作,但haml页面失败
【发布时间】:2012-11-02 18:57:27
【问题描述】:

所以我的 routes.rb 文件中有以下代码:

match "/movies/:id/find_similar_movies", :to => "movies#similar", :as => "find_similar_movies"

然后在一个haml页面中我有以下内容:

= link_to 'Find Movies With Same Director', find_similar_movies_path(:id=>@movie.id)

然后在我的控制器中:

def similar
    movie=Movie.find_by_id([params(:id)])
    @movie_title=movie.title
    @similar_movies=Movie.find_all_by_director(movie.director)
  end

在我写的similar.html.haml中:

%h2 Similar movies with #{@movie_title}
%ul
- @similar_movies.each do |movie|
  %li = movie
= link_to 'Back to movie list', movies_path

当我按下= link_to 'Find Movies With Same Director', find_similar_movies_path(:id=>@movie.id)

我明白了:

参数数量错误(1 比 0)

Rails.root: /home/ubuntu/hw4_rottenpotatoes 应用程序跟踪 |框架跟踪 |全程跟踪

app/controllers/movies_controller.rb:10:in `similar'

请求

参数:

{"id"=>"6"}

怎么了?感谢您的宝贵时间...

【问题讨论】:

  • 这很可能意味着您的 find_similar_movies 操作中的某处存在错误,但如果没有完整的错误消息和匹配代码,则很难判断
  • find_similar_movies 操作是什么意思?我没有更多关于类似页面的代码
  • 我的意思是 similar 行动对不起。但是,是的,我们需要可以在浏览器或 Rails 服务器中找到的完整错误消息
  • 另一种编写这样的路由的方法是在 resources :movies do 块内;例如get 'find_more_similar', :on => :member'。这个快捷方式会通过 GET 自动识别路径 /movies/:id/find_more_similar,路由到 MoviesController 的 find_more_similar 动作,并生成 helper find_more_similar_movies_path。 guides.rubyonrails.org/routing.html#adding-more-restful-actions
  • @AnthonyAlberto:你有什么发现吗?需要更多信息吗?我已将浏览器中显示的错误代码添加到我的初始帖子中。

标签: ruby-on-rails routes haml


【解决方案1】:

params(:id) 正在尝试使用 :id 参数调用名为 params 的方法,但这不是它的工作原理。 params 应被视为哈希,其查找语法为 params[:id]

试试Movie.find_by_id(params[:id])

【讨论】:

    猜你喜欢
    • 2013-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    相关资源
    最近更新 更多