在Rails中有has_many,belongs_to问题

时间:2013-03-12 21:06:58

标签: ruby-on-rails has-many belongs-to

我正在尝试创建一个有很多电影的导演列表(每部电影属于一个导演):

class Director < ActiveRecord::Base
  attr_accessible :director

  has_many :movies
end

class Movies < ActiveRecord::Base
  attr_accessible :director_id, :title, :rating, :boxoffice

  belongs_to :director
end

我的架构如下所示:

ActiveRecord::Schema.define(:version => 20130312174246) do

  create_table "directors", :force => true do |t|
    t.string   "director"
    t.datetime "created_at", :null => false
    t.datetime "updated_at", :null => false
  end

  create_table "movies", :force => true do |t|
    t.integer  "director_id"
    t.string   "title"
    t.string   "rating"
    t.integer  "boxoffice"
    t.datetime "created_at",      :null => false
    t.datetime "updated_at",      :null => false
  end

end

在导演控制器中显示:

 def show
    @director = Director.find(params[:director_id])
    @movies = @director.movies
    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @director }
    end
  end

我最终想点击导演,看看他或她所导演的所有电影,以及电影的各自评级和票房$。目前我收到此错误:无法找到没有ID的Director

Rails的新手,所以我不知道如何解决这个问题。这是我想要做的正确设置吗?如果没有,我应该如何改变它?谢谢!

1 个答案:

答案 0 :(得分:1)

您应该使用params[:id]获取导演,而不是params[:director_id] 试试这个:

@director = Director.find(params[:id])

要查看导演制作的所有电影都采用嵌套路线:

resources :directors do
  resources :movies
end

要使所有操作都在MovieController中运行,您必须遵循嵌套路由语法。在这里找到它: http://guides.rubyonrails.org/routing.html或者在网上找到僵尸2教程幻灯片的轨道,它也很好地解释了。