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?

有帮助吗?

解决方案

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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top