我有一个用户填写的表单,其中包含标题和正文。我还想传递他们存储在cookie中的用户ID以及其他一些计算值。
在我的控制器的创建部分中,我有以下代码:
@ticket = Ticket.new(params[:ticket])
@ticket.save
redirect_to ticket_path(@ticket)
我是否需要在Ticket.new调用之后分配这些计算值,还是可以以某种方式将这些值与params散列一起传递?
答案 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
分配给故障单,最好在单独的分配中进行,并保护它。