我可以在数据库中多次保存rails表单值吗?

时间:2014-07-25 17:16:33

标签: ruby-on-rails ruby forms simple-form

我不知道是否可能,但我有一个表格,当我提交表格时,我希望记录在数据库中多次保存。截至目前,我并不担心效率,而是为了让这件事情继续下去。

@message = Message.new

<%= simple_form_for @message do |f| %>
 <%= f.input :description, as: :text, input_html: {rows: 7}, label: false, placeholder: "Type your    message ..." %>
 <%= f.submit "Submit", class: "btn btn-info" %>
<%end%>

我想要多次保存上面的表格,比如(我知道它是愚蠢的)

for i in 1..4
 @message.save
end

意向: 我的目的是立即向所有小组成员发送一条消息。我现在拥有group_iddescription,当用户提交表单时,我想迭代所有关注group_id的用户,并使用相应的{{1}保存记录谁都跟随小组。 我不认为我需要对此进行验证。

2 个答案:

答案 0 :(得分:0)

你在表格中没有group_id,所以我不确定它是否在其他地方,但你声称拥有它,所以我只是假设你这样做。

@group = Group.find(group_id)
@group.users.each do |user|
  message_params = params[:message].merge(user_id: user.id)
  Message.create(message_params)
end

答案 1 :(得分:-1)

<强>更新

所以我做了一些挖掘,发现这并不像我原先想象的那么简单。

当你拨打@message.save时,rails会在幕后检查该记录是否是新记录(即呼叫@message.new_record?)如果它不是新记录,它将更新现有记录而不是创建一个新的。如果可以覆盖它,则可以多次保存记录。

我在尝试直接设置new_record属性时发现的问题是它仅在初始化时调用(调用@message.new时)并且如果记录未初始化,则new_record默认为false。

正如其他人在评论中指出的那样,确实不需要成为保存相同记录的理由(这就是为什么rails不容易允许它)。如果要将同一消息分配给多个用户,请设置关联以关联这两个模型。如果您每次执行某些操作时都需要使用相同的消息,请创建一次,然后只需在需要使用它时从数据库中获取它。