使用额外参数将哈希传递给控制器

时间:2012-07-23 19:55:03

标签: ruby-on-rails

我有一个用户填写的表单,其中包含标题和正文。我还想传递他们存储在cookie中的用户ID以及其他一些计算值。

在我的控制器的创建部分中,我有以下代码:

@ticket = Ticket.new(params[:ticket])
@ticket.save
redirect_to ticket_path(@ticket)

我是否需要在Ticket.new调用之后分配这些计算值,还是可以以某种方式将这些值与params散列一起传递?

2 个答案:

答案 0 :(得分:3)

由于params的票证密钥只是一个散列,您可以使用merge来添加其他键/值对

@ticket = Ticket.new(params[:ticket].merge({user_id: cookies[:user_id]}))
@ticket.save
redirect_to ticket_path(@ticket)

假设您正在使用Active Relation和User has_many :tickets,您也可以执行类似的操作(此示例假设current_user由类似于Devise的内容定义)

@ticket = current_user.tickets.build(params[:ticket])
@ticket.save
redirect_to ticket_path(@ticket)

第二种方式可以让你更清楚自己想做什么。

答案 1 :(得分:0)

您可以在表单中使用f.hidden_field来传递一些额外的计算值。

如果您想将current_user分配给故障单,最好在单独的分配中进行,并保护它。