Rails 3嵌套资源编辑/更新控制器

时间:2011-03-08 14:56:31

标签: ruby-on-rails ruby-on-rails-3

我正在围绕嵌套资源(真棒btw),我对控制器中的编辑和更新操作有疑问。

我的路线设置如下:

resources :events do
 resources :people
end

在我的People控制器中,我有以下新操作:

 @event = current_user.events.find(params[:event_id])
 @person = @event.people.build
 @person.build_address

以及我的创建操作:

@event = current_user.events.find(params[:event_id])
@person = @event.people.build(params[:person]) 

这一切都很有效。

我不确定我需要为编辑和更新操作做些什么。谷歌搜索没有产生任何良好的联系。

以下是我的模特:

class Event < ActiveRecord::Base
   belongs_to :user
   belongs_to :address
   has_many :people
   accepts_nested_attributes_for :address, :allow_destroy => true
end

class Person < ActiveRecord::Base
  belongs_to :event
  belongs_to :address
  accepts_nested_attributes_for :address, :allow_destroy => true
end

class Address < ActiveRecord::Base
  has_many :people
  has_many :events
end

我基本上想确保在编辑某人时,AR会更新正确的事件ID和地址ID以及此人的详细信息。

谢谢!

1 个答案:

答案 0 :(得分:3)

您的型号设置不正确。你有一个

belongs_to

在事件地址和人员 - 地址关系的任一侧。在一对多的关系中,你需要有一个

has_many

在一侧,一个

belongs_to

另一方面。

除了你的控制器之外,它非常直接地设置你的编辑和更新动作。它就是你如何设置新的和创建动作。 这是一个Railscast,讨论嵌套资源。

注意:如果您更正了模型关系,则可以更轻松地使用控制器代码。

<强>更新

您的模特关系看起来很好。所以现在它很简单。我希望我链接的Railscast帮助你了解嵌套资源。

这是Nested Resources上另一个有用的资源。