如果用户不存在,则通过嵌套资源创建用户

时间:2013-11-17 10:44:23

标签: ruby-on-rails ruby model nested-forms nested-attributes

谢谢您的支持。我有一个表格,我正在努力探索构建它的最佳方式。

我有一个表单来创建一个新的事件,并希望列出一个用户的字段,简单的电子邮件&名称。

创建事件时,如果嵌套资源User不存在,或者user_id应更改为User表中的用户,则应创建该用户。我的应用程序未使用任何身份验证,因此current_user不可用。该应用程序将用于人们输入名称和电子邮件实际上属于他们的善意。

这是我到目前为止所拥有的......

活动模型

belongs_to :user
has_many :attendees, dependent: :destroy
has_many :comments, dependent: :destroy
accepts_nested_attributes_for :user, allow_destroy: true, reject_if: :all_blank

用户模型

has_many :events, dependent: :destroy

事件控制器#New

@event = Event.new
@event.build_user (I assume this is working and is building the user)

活动视图#新

<h2>Get Started</h2>

<%= simple_form_for @outing, multipart: true do |f| %>
<fieldset>
        <legend>Event Details</legend>
        <%= f.input :name, autofocus: true %>
        <%= f.label :chosen_date %>
        <%= f.text_field :chosen_date, start_year: Date.today.year, :"data-behaviour" => 'datepicker' %>
        <%= f.input :chosen_time, minute_step: 5 %>
        <%= f.input :description %>
    </fieldset>

    <%= render 'user_form', :user => @event.user %>

    <%= f.button :submit %>
<% end %>

User_Form看起来像这样..

<fieldset>
    <legend>About You</legend>
    <%= simple_fields_for user do |u| %>
    <%= u.name %>
    <%= u.email %>
    <% end %>
</fieldset>

我不确定这是否是正确的方法。我需要一些指导,如何在Controller端做什么来通过嵌套资源更改user_id。

我当前收到的错误是......

undefined method `name' for #

提前致谢!! :)

1 个答案:

答案 0 :(得分:1)

你没有提供整个堆栈跟踪,这使得很难说出任何确定的内容。这就是为什么我为你的问题做了一个downvote。

所以这是我的猜测:

你的user_form如下所示:

<fieldset>
    <legend>About You</legend>
    <%= simple_fields_for user do |u| %>
    <%= u.name %>
    <%= u.email %>
    <% end %>
</fieldset>

它在name上调用方法emailu。在这种情况下,usimple_fields_for创建的对象。它是一个表单助手,允许您创建输入字段,选择框等,就像在new部分中完成一样。

所以不应拨打u.name,而应该是u.input :nameu.input :email