简体   繁体   中英

Rails accessing controller actions in a nested attribute form

I have a nested form as follows for Membership with a nested MembershipInvite :

<%= form_for [@user, @car, @membership] do |f| %>
  <%= f.hidden_field :car_id, class: "form-control", value: @car.id %>
  <%= f.fields_for :membership_invites do |builder| %>
      <% @code = Digest::SHA1.hexdigest([Time.now, rand].join) %>
      <%= builder.hidden_field :car_id, class: "form-control", value: @car.id %>
      <%= builder.hidden_field :invite_code, class: "form-control", value: @code %>
      <div class="form-group"> 
          <%= builder.label :user_email %>
          <%= builder.text_field :user_email, class: "form-control" %>
      </div>
  <% end %>
  <%= f.submit "Add Member", class: "btn btn-large btn-primary" %>
<% end %>

It works fine and everything is saved, however, I have a deliver call for an email in my MembershipInvite controller (create method) which is not calling. I only want to call this deliver method if something is true in the form.

How can I access the nested form attributes on the Membership controller (as this create methid seems to be calling). Is it along the lines of @membership.membership_invites_attributes?

Memberships Controller

def create

    @membership = Membership.create(membership_params)

    #I WOULD LIVE TO SEND AN EMAIL HERE DEPENDING ON FIELDS FILLED IN FROM THE MEMBERSHIP FORM AND NESTED MEMBERSHIP INVITES FORM. 

    if @membership.save
        redirect_to current_user, notice: "Membership created"
    else
        render 'new'
    end
end

I have actually managed to do this in my Model with an after_create method. Please let me know if anyone knows of a better way to do this!?

Model after_create :send_invite

def send_invite

    @user = User.where(email: self.user_email).first

    unless @user.blank?
        @membership = Membership.find(self.membership_id)
        @membership.update_attributes(:user_id => @user.id)
    else
        InviteMailer.new_invite(self).deliver
    end
end

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM