0

我有一个具有管理员模型的 Rails 应用程序,其中包含许多用户和用户has_and_belongs_to_many材料。问题是对于特定用户(例如user/show/2),我在该页面上有一个表单,可以发布到材料create操作。在创建操作中,这是我想要做的

def create
@material = @user.materials.create(material_params)
end

但是,它不起作用,因为@useris nil。这需要通过users_materials表格将材料与用户关联(因为has_and_belongs_to_many关联)。那么,我将如何从用户页面 ( user/show/:id) 定义材料并能够为该用户定义材料?在 Rails 中执行此操作的好方法是什么?

4

1 回答 1

1

听起来好像您拥有的是嵌套资源。

这里有一个关于它们的 RailsCast ,它们在本指南中进行了讨论。

快速版本是您将大致像这样定义您的路线:

resources :users do
  resources :materials
end

并且该表单将 POST 到/users/:user_id/materials,我相信您会称之为 users_materials_path(@user).

控制器操作 ( MaterialsController#create) 将能够引用params[:user_id],并且可以简单地将其分配为user_idMaterial或者实际加载该用户 ( User.find(params[:user_id]) 然后调用.materials.create它。

于 2013-09-09T16:25:39.413 回答