Rails 3,通过中间页面获取对象的id

时间:2012-05-24 16:14:27

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

我正在使用三种模式:user,project和userprivilege。 userprivilege模型由user_id,project_id和accessLevel值组成。用户和项目模型与userprivilege具有'has_many'关系,并且彼此之间具有'has_many,through'关系。

当用户创建项目时,会在userprivileges表中创建相应的条目。我不确定如何为用户与另一个用户共享项目的情况创建这样的条目。在这种情况下,用户访问项目页面,单击链接以共享对项目的访问权限,并指定目标用户的电子邮件。

我正在将此情况与UserprivilegesController中的“new”操作相关联。在“创建”操作中,我可以访问与其共享项目的用户对象(使用电子邮件ID),但我不确定如何获取正在共享项目的项目ID。有没有办法在用户访问项目页面并点击共享访问链接时存储项目ID?

感谢。


感谢Aldo的评论,我能够解决这个问题。但是,我有一个相关的问题:是否可以使用routes.rb文件来解决这个问题。我可以在项目路线中包含Userprivilege操作的路线吗?例如:/ projects / 1 / userprivileges / new或/ projects / 1 / userprivileges / 1 / edit。然后,我可以从URI获取项目ID。但是,必须有一个限制,以便只能从与它们相关的项目访问userprivileges,因此不允许使用/ projects / 2 / userprivileges / 1 / edit之类的东西。我怎么能实施这个限制?

1 个答案:

答案 0 :(得分:0)

您应该将project_id传递给UserprivilegesController#new。使用link_to选项在项目视图中执行此操作,例如:

# app/views/project.html.erb
<%= link_to "Share access", {controller: 'userprivileges', action: 'new', project_id: @project.id}

然后,在该控制器中,您可以使用params[:project_id]从参数中获取此值,并使用隐藏字段添加到表单中的某个位置(使用hidden_fieldhidden_field_tag,具体取决于您的方式'重建你的表格。)

我们的想法是在用户提交表单时传递project_id,以便UserprivilegesController#create操作可以使用params[:project_id]再次访问它。