ruby on rails - Save relation with omniauth identity -
i allow user take service (free, standard, pro) in registration step.
here db model i'm working with:
(user)1---n(subscription)n--1(service)
in "new user" form have customised code in order allow user chose service:
identities/new.hmtl.erb
<%= form_tag "/auth/identity/register", :html => {:role=>"form"} %> <div class="form-group"> <label>service</label> <%= select("service", "service_id", @available_services, {:selected => params[:service_id]}, {class:"form-control"}) %> </div> <div class="form-group"> <label>name</label> <%= text_field_tag :name, nil, class:"form-control" %> <p class="help-block">nome e cognome completo e corretto.</p> </div> <div class="form-group"> <label>email</label> <%= text_field_tag :email, @identity.try(:email), class:"form-control" %> </div> <div class="form-group"> <label>password</label> <%= password_field_tag :password, nil, class:"form-control"%> </div> <div class="form-group"> <label>password confirmation</label> <%= password_field_tag :password_confirmation, nil, class:"form-control"%> </div> <%= submit_tag "sign up",class:"btn btn-default" %> <% end %>
identities_controller.rb
class identitiescontroller < applicationcontroller skip_before_filter :require_login layout "static" def new @available_services = service.all.where(:id => [1, 2, 3]).collect {|p| [ p.name, p.id ] } @identity = env['omniauth.identity'] end end
now, what's way create/save user , relation between new user , selected subscription?
i solved by...
adding hidden field service:
#identitiy.new.html <%= hidden_field_tag :service_id, params[:service_id] %>
edited omniauth initializer follow:
#omniauth.rb rails.application.config.middleware.use omniauth::builder provider :identity,:fields => [:service_id,:name,:email], on_failed_registration: lambda { |env| identitiescontroller.action(:new).call(env) } end
added attr_accessor , after_create method in identity model:
#identity.rb class identity < omniauth::identity::models::activerecord attr_accessor :service_id validates_presence_of :name validates_uniqueness_of :email #validates_format_of :email, :with => /^[-a-z0-9_+\.]+\@([-a-z0-9]+\.)+[a-z0-9]{2,4}$/i after_create :add_subscription private def add_subscription subscription.create(:user_id => self.id, :service_id => service_id.to_f) end end
ruby-on-rails ruby-on-rails-4 omniauth
No comments:
Post a Comment