Domanda

I'm overriding the create method of InvitationsController in devise_invitable the original code of which looks like this:

  def create
    self.resource = resource_class.invite!(resource_params, current_inviter)

    if resource.errors.empty?
      set_flash_message :notice, :send_instructions, :email => self.resource.email
      respond_with resource, :location => after_invite_path_for(resource)
    else
      respond_with_navigational(resource) { render :new }
    end
  end

I'm trying to add some fields_for to the invitation form so that I can build some objects associated with the member when I create the member in this controller. I can do it explicitly like by adding something like

    resource.my_associations.build(params[:my_association])

Is there a way to generalize the build statement? Perhaps imply the class name from teh params and build the association without knowing what it's called beforehand?

È stato utile?

Soluzione

If the params hash contains only your association name(s), then you could write something like

params.each do |association, attributes|
  resource.send(association.to_s.pluralize).build(attributes)
end
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top