在rails中将实例变量从一个控制器传递到另一个控制器

时间:2013-09-09 16:16:51

标签: ruby-on-rails

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

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

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

1 个答案:

答案 0 :(得分:1)

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

有一个关于他们的RailsCast here,他们在this guide中进行了讨论。

快速版本是您将大致如此定义您的路线:

resources :users do
  resources :materials
end

表单将POST到/users/:user_id/materials,我相信你称之为users_materials_path(@user)

控制器操作(MaterialsController#create)将能够引用params[:user_id],并且可以简单地将其指定为user_id的{​​{1}},或者实际加载用户(Material),然后在其上调用User.find(params[:user_id]