使用Rails,我有以下形式......
活动#New - 表单部分
<%= simple_form_for @event, multipart: true do |f| %>
...
<% unless signed_in? %>
<%= f.simple_fields_for :user do |u| %>
<%= u.input :name %>
<%= u.input :email %>
<% end %>
<% end %>
...
<%= f.submit %>
<% end %>
提交该表单后,它将创建表单和nested_attribute。哪个事件属于一个用户。
活动模型
class Event < ActiveRecord::Base
belongs_to :user
accepts_nested_attributes_for :user
end
但是我的问题是,这些字段是必需的,您无需登录即可提交此表单。
我想要的是当您填写表单并且用户电子邮件存在时,它应该只是将事件添加到该用户,否则它应该创建一个新的用户记录。 现在它所做的只是添加其他用户记录。
我设法得到一些不使用nested_attributes的方法,只是接受params[:name]
和params[:email]
然后检查,如果它存在,则将其添加为User.find_by(email: params[:email]).builds.events(event_params)
但我我想直接修改模型处理数据的方式,因为我觉得控制器不适合这种逻辑。
对此有任何帮助将不胜感激!
谢谢:)
答案 0 :(得分:1)
不要使用嵌套属性,请使用表单类方法,请参阅http://blog.codeclimate.com/blog/2012/10/17/7-ways-to-decompose-fat-activerecord-models/上的“3.提取表单对象”部分,了解如何执行此操作,
嵌套属性有一种方法可以一遍又一遍地咬你,你刚刚找到其中一个