简体   繁体   中英

Rails Devise Registration Form with Nested Models

I have the following models

members(id, name, company_id)
companies(id, name, ...)

Now when i signup using devise model - members i want to create a record in the companies model and update company_id in the members model.

Can i build the company in the signup for like below

class Brands::Members::RegistrationsController < Devise::RegistrationsController
  before_action :configure_sign_up_params, only: [:create]
# before_action :configure_account_update_params, only: [:update]

  # GET /resource/sign_up
  def new
    build_resource({})
    resource.build_company
    respond_with self.resource
  end
end

Members Model

class Member < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  acts_as_paranoid
  attr_accessor :company_name

  # Associations
  belongs_to :company

  accepts_nested_attributes_for :company
end

Company Model

class Company < ActiveRecord::Base
  extend FriendlyId
  # friendly_id :name, use: :slugged
  acts_as_paranoid

  @company_type = %w(agency brand)

  # Associations
  has_many :members, dependent: :destroy
  has_many :brands, dependent: :destroy
end

Signup Form

<h2>Sign up</h2>

<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
  <%= devise_error_messages! %>

  <div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name, autofocus: true, value: 'Harha MV' %>
  </div>

  <div class="field">
    <%= f.label :email %><br />
    <%= f.email_field :email, value: 'harsha@mink7.com' %>
  </div>

  <div class="field">
    <%= f.label :password %>
    <% if @minimum_password_length %>
    <em>(<%= @minimum_password_length %> characters minimum)</em>
    <% end %><br />
    <%= f.password_field :password, autocomplete: "off", value: 'harsha' %>
  </div>

  <h4>Enter your company details</h4>
  <%= f.fields_for :company do |fc| %>
    <div class="field">
      <%= fc.label :name %><br />
      <%= fc.text_field :name, value: 'Mink7' %>
    </div>

  <% end %>

  <div class="actions">
    <%= f.submit "Sign up" %>
  </div>
<% end %>

<%= render "brands/members/shared/links" %>

Error

NoMethodError at /members

undefined method `' for #<Company:0x007f99fc7e5638>

method_missing
activemodel (4.2.5.2) lib/active_model/attribute_methods.rb

    def method_missing(method, *args, &block)
      if respond_to_without_attributes?(method, true)
        super
      else
        match = match_attribute_method?(method.to_s)
        match ? attribute_missing(match, *args, &block) : super
      end
    end

Command Line Dump

NoMethodError - undefined method `created_by' for #<Company:0x007f9a04e65550>:
  activemodel (4.2.5.2) lib/active_model/attribute_methods.rb:433:in `method_missing'
  activemodel (4.2.5.2) lib/active_model/validator.rb:149:in `block in validate'
  activemodel (4.2.5.2) lib/active_model/validator.rb:148:in `validate'
  activerecord (4.2.5.2) lib/active_record/validations/presence.rb:5:in `validate'
  activesupport (4.2.5.2) lib/active_support/callbacks.rb:455:in `block in make_lambda'
  activesupport (4.2.5.2) lib/active_support/callbacks.rb:192:in `block in simple'
  activesupport (4.2.5.2) lib/active_support/callbacks.rb:504:in `block in call'
  activesupport (4.2.5.2) lib/active_support/callbacks.rb:504:in `call'
  activesupport (4.2.5.2) lib/active_support/callbacks.rb:92:in `__run_callbacks__'
  activesupport (4.2.5.2) lib/active_support/callbacks.rb:778:in `_run_validate_callbacks'
  activemodel (4.2.5.2) lib/active_model/validations.rb:399:in `run_validations!'
  activemodel (4.2.5.2) lib/active_model/validations/callbacks.rb:113:in `block in run_validations!'
  activesupport (4.2.5.2) lib/active_support/callbacks.rb:88:in `__run_callbacks__'
  activesupport (4.2.5.2) lib/active_support/callbacks.rb:778:in `_run_validation_callbacks'
  activemodel (4.2.5.2) lib/active_model/validations/callbacks.rb:113:in `run_validations!'
  activemodel (4.2.5.2) lib/active_model/validations.rb:338:in `valid?'
  activerecord (4.2.5.2) lib/active_record/validations.rb:58:in `valid?'
  activerecord (4.2.5.2) lib/active_record/autosave_association.rb:324:in `association_valid?'
  activerecord (4.2.5.2) lib/active_record/autosave_association.rb:303:in `validate_single_association'
  activerecord (4.2.5.2) lib/active_record/autosave_association.rb:217:in `block in define_autosave_validation_callbacks'
  activerecord (4.2.5.2) lib/active_record/autosave_association.rb:157:in `block in define_non_cyclic_method'
  activesupport (4.2.5.2) lib/active_support/callbacks.rb:432:in `block in make_lambda'
  activesupport (4.2.5.2) lib/active_support/callbacks.rb:192:in `block in simple'
  activesupport (4.2.5.2) lib/active_support/callbacks.rb:504:in `block in call'
  activesupport (4.2.5.2) lib/active_support/callbacks.rb:504:in `call'
  activesupport (4.2.5.2) lib/active_support/callbacks.rb:92:in `__run_callbacks__'
  activesupport (4.2.5.2) lib/active_support/callbacks.rb:778:in `_run_validate_callbacks'
  activemodel (4.2.5.2) lib/active_model/validations.rb:399:in `run_validations!'
  activemodel (4.2.5.2) lib/active_model/validations/callbacks.rb:113:in `block in run_validations!'
  activesupport (4.2.5.2) lib/active_support/callbacks.rb:117:in `call'
  activesupport (4.2.5.2) lib/active_support/callbacks.rb:555:in `block (2 levels) in compile'
  activesupport (4.2.5.2) lib/active_support/callbacks.rb:505:in `call'
  activesupport (4.2.5.2) lib/active_support/callbacks.rb:92:in `__run_callbacks__'
  activesupport (4.2.5.2) lib/active_support/callbacks.rb:778:in `_run_validation_callbacks'
  activemodel (4.2.5.2) lib/active_model/validations/callbacks.rb:113:in `run_validations!'
  activemodel (4.2.5.2) lib/active_model/validations.rb:338:in `valid?'
  activerecord (4.2.5.2) lib/active_record/validations.rb:58:in `valid?'
  activerecord (4.2.5.2) lib/active_record/validations.rb:83:in `perform_validations'
  activerecord (4.2.5.2) lib/active_record/validations.rb:37:in `save'
  activerecord (4.2.5.2) lib/active_record/attribute_methods/dirty.rb:21:in `save'
  activerecord (4.2.5.2) lib/active_record/transactions.rb:286:in `block (2 levels) in save'
  activerecord (4.2.5.2) lib/active_record/transactions.rb:351:in `block in with_transaction_returning_status'
  activerecord (4.2.5.2) lib/active_record/connection_adapters/abstract/database_statements.rb:213:in `block in transaction'
  activerecord (4.2.5.2) lib/active_record/connection_adapters/abstract/transaction.rb:184:in `within_new_transaction'
  activerecord (4.2.5.2) lib/active_record/connection_adapters/abstract/database_statements.rb:213:in `transaction'
  activerecord (4.2.5.2) lib/active_record/transactions.rb:220:in `transaction'
  activerecord (4.2.5.2) lib/active_record/transactions.rb:348:in `with_transaction_returning_status'
  activerecord (4.2.5.2) lib/active_record/transactions.rb:286:in `block in save'
  activerecord (4.2.5.2) lib/active_record/transactions.rb:301:in `rollback_active_record_state!'
  activerecord (4.2.5.2) lib/active_record/transactions.rb:285:in `save'
  newrelic_rpm (3.15.0.314) lib/new_relic/agent/instrumentation/active_record_helper.rb:26:in `block in save'
  newrelic_rpm (3.15.0.314) lib/new_relic/agent/transaction.rb:848:in `with_database_metric_name'
  newrelic_rpm (3.15.0.314) lib/new_relic/agent.rb:572:in `with_database_metric_name'
  newrelic_rpm (3.15.0.314) lib/new_relic/agent/instrumentation/active_record_helper.rb:25:in `save'
   () Users/harshamv/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/bundler/gems/devise-342304375946/app/controllers/devise/registrations_controller.rb:17:in `create'
  actionpack (4.2.5.2) lib/action_controller/metal/implicit_render.rb:4:in `send_action'
  actionpack (4.2.5.2) lib/abstract_controller/base.rb:198:in `process_action'
  actionpack (4.2.5.2) lib/action_controller/metal/rendering.rb:10:in `process_action'
  actionpack (4.2.5.2) lib/abstract_controller/callbacks.rb:20:in `block in process_action'
  activesupport (4.2.5.2) lib/active_support/callbacks.rb:117:in `call'
  activesupport (4.2.5.2) lib/active_support/callbacks.rb:555:in `block (2 levels) in compile'
  activesupport (4.2.5.2) lib/active_support/callbacks.rb:505:in `call'
  activesupport (4.2.5.2) lib/active_support/callbacks.rb:92:in `__run_callbacks__'
  activesupport (4.2.5.2) lib/active_support/callbacks.rb:778:in `_run_process_action_callbacks'
  activesupport (4.2.5.2) lib/active_support/callbacks.rb:81:in `run_callbacks'
  actionpack (4.2.5.2) lib/abstract_controller/callbacks.rb:19:in `process_action'
  actionpack (4.2.5.2) lib/action_controller/metal/rescue.rb:29:in `process_action'
  actionpack (4.2.5.2) lib/action_controller/metal/instrumentation.rb:32:in `block in process_action'
  activesupport (4.2.5.2) lib/active_support/notifications.rb:164:in `block in instrument'
  activesupport (4.2.5.2) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
  activesupport (4.2.5.2) lib/active_support/notifications.rb:164:in `instrument'
  actionpack (4.2.5.2) lib/action_controller/metal/instrumentation.rb:30:in `process_action'
  actionpack (4.2.5.2) lib/action_controller/metal/params_wrapper.rb:250:in `process_action'
  activerecord (4.2.5.2) lib/active_record/railties/controller_runtime.rb:18:in `process_action'
  actionpack (4.2.5.2) lib/abstract_controller/base.rb:137:in `process'
  actionview (4.2.5.2) lib/action_view/rendering.rb:30:in `process'
  actionpack (4.2.5.2) lib/action_controller/metal.rb:196:in `dispatch'
  actionpack (4.2.5.2) lib/action_controller/metal/rack_delegation.rb:13:in `dispatch'
  actionpack (4.2.5.2) lib/action_controller/metal.rb:237:in `block in action'
  actionpack (4.2.5.2) lib/action_dispatch/routing/route_set.rb:74:in `dispatch'
  actionpack (4.2.5.2) lib/action_dispatch/routing/route_set.rb:43:in `serve'
  actionpack (4.2.5.2) lib/action_dispatch/routing/mapper.rb:49:in `serve'
  actionpack (4.2.5.2) lib/action_dispatch/journey/router.rb:43:in `block in serve'
  actionpack (4.2.5.2) lib/action_dispatch/journey/router.rb:30:in `serve'
  actionpack (4.2.5.2) lib/action_dispatch/routing/route_set.rb:815:in `call'
  newrelic_rpm (3.15.0.314) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
  meta_request (0.4.0) lib/meta_request/middlewares/app_request_handler.rb:13:in `call'
  newrelic_rpm (3.15.0.314) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
  meta_request (0.4.0) lib/meta_request/middlewares/meta_request_handler.rb:13:in `call'
  newrelic_rpm (3.15.0.314) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
  bullet (5.0.0) lib/bullet/rack.rb:10:in `call'
  newrelic_rpm (3.15.0.314) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
  newrelic_rpm (3.15.0.314) lib/new_relic/rack/agent_hooks.rb:30:in `traced_call'
  newrelic_rpm (3.15.0.314) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
  newrelic_rpm (3.15.0.314) lib/new_relic/rack/browser_monitoring.rb:32:in `traced_call'
  newrelic_rpm (3.15.0.314) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
  versionist (1.4.1) lib/versionist/middleware.rb:39:in `_call'
  versionist (1.4.1) lib/versionist/middleware.rb:17:in `call'
  newrelic_rpm (3.15.0.314) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
  warden (1.2.6) lib/warden/manager.rb:35:in `block in call'
  warden (1.2.6) lib/warden/manager.rb:34:in `call'
  newrelic_rpm (3.15.0.314) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
  rack (1.6.4) lib/rack/etag.rb:24:in `call'
  newrelic_rpm (3.15.0.314) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
  rack (1.6.4) lib/rack/conditionalget.rb:38:in `call'
  newrelic_rpm (3.15.0.314) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
  rack (1.6.4) lib/rack/head.rb:13:in `call'
  newrelic_rpm (3.15.0.314) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
  actionpack (4.2.5.2) lib/action_dispatch/middleware/params_parser.rb:27:in `call'
  newrelic_rpm (3.15.0.314) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
  actionpack (4.2.5.2) lib/action_dispatch/middleware/flash.rb:260:in `call'
  newrelic_rpm (3.15.0.314) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
  rack (1.6.4) lib/rack/session/abstract/id.rb:225:in `context'
  rack (1.6.4) lib/rack/session/abstract/id.rb:220:in `call'
  newrelic_rpm (3.15.0.314) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
  actionpack (4.2.5.2) lib/action_dispatch/middleware/cookies.rb:560:in `call'
  newrelic_rpm (3.15.0.314) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
  activerecord (4.2.5.2) lib/active_record/query_cache.rb:36:in `call'
  newrelic_rpm (3.15.0.314) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
  activerecord (4.2.5.2) lib/active_record/connection_adapters/abstract/connection_pool.rb:653:in `call'
  newrelic_rpm (3.15.0.314) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
  activerecord (4.2.5.2) lib/active_record/migration.rb:377:in `call'
  newrelic_rpm (3.15.0.314) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
  actionpack (4.2.5.2) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'
  activesupport (4.2.5.2) lib/active_support/callbacks.rb:88:in `__run_callbacks__'
  activesupport (4.2.5.2) lib/active_support/callbacks.rb:778:in `_run_call_callbacks'
  activesupport (4.2.5.2) lib/active_support/callbacks.rb:81:in `run_callbacks'
  actionpack (4.2.5.2) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
  newrelic_rpm (3.15.0.314) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
  actionpack (4.2.5.2) lib/action_dispatch/middleware/reloader.rb:73:in `call'
  newrelic_rpm (3.15.0.314) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
  actionpack (4.2.5.2) lib/action_dispatch/middleware/remote_ip.rb:78:in `call'
  newrelic_rpm (3.15.0.314) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
  better_errors (2.1.1) lib/better_errors/middleware.rb:84:in `protected_app_call'
  better_errors (2.1.1) lib/better_errors/middleware.rb:79:in `better_errors_call'
  better_errors (2.1.1) lib/better_errors/middleware.rb:57:in `call'
  newrelic_rpm (3.15.0.314) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
  actionpack (4.2.5.2) lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call'
  newrelic_rpm (3.15.0.314) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
  web-console (2.3.0) lib/web_console/middleware.rb:28:in `block in call'
  web-console (2.3.0) lib/web_console/middleware.rb:18:in `call'
  newrelic_rpm (3.15.0.314) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
  rack-contrib (1.4.0) lib/rack/contrib/response_headers.rb:17:in `call'
  meta_request (0.4.0) lib/meta_request/middlewares/headers.rb:16:in `call'
  newrelic_rpm (3.15.0.314) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
  actionpack (4.2.5.2) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
  newrelic_rpm (3.15.0.314) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
  railties (4.2.5.2) lib/rails/rack/logger.rb:38:in `call_app'
  railties (4.2.5.2) lib/rails/rack/logger.rb:20:in `block in call'
  activesupport (4.2.5.2) lib/active_support/tagged_logging.rb:68:in `block in tagged'
  activesupport (4.2.5.2) lib/active_support/tagged_logging.rb:26:in `tagged'
  activesupport (4.2.5.2) lib/active_support/tagged_logging.rb:68:in `tagged'
  railties (4.2.5.2) lib/rails/rack/logger.rb:20:in `call'
  newrelic_rpm (3.15.0.314) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
  actionpack (4.2.5.2) lib/action_dispatch/middleware/request_id.rb:21:in `call'
  newrelic_rpm (3.15.0.314) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
  rack (1.6.4) lib/rack/methodoverride.rb:22:in `call'
  newrelic_rpm (3.15.0.314) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
  rack (1.6.4) lib/rack/runtime.rb:18:in `call'
  newrelic_rpm (3.15.0.314) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
  activesupport (4.2.5.2) lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call'
  newrelic_rpm (3.15.0.314) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
  rack (1.6.4) lib/rack/lock.rb:17:in `call'
  newrelic_rpm (3.15.0.314) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
  actionpack (4.2.5.2) lib/action_dispatch/middleware/static.rb:116:in `call'
  newrelic_rpm (3.15.0.314) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
  rack (1.6.4) lib/rack/sendfile.rb:113:in `call'
  newrelic_rpm (3.15.0.314) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
  railties (4.2.5.2) lib/rails/engine.rb:518:in `call'
  railties (4.2.5.2) lib/rails/application.rb:165:in `call'
  newrelic_rpm (3.15.0.314) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
  rack (1.6.4) lib/rack/lock.rb:17:in `call'
  rack (1.6.4) lib/rack/content_length.rb:15:in `call'
  rack (1.6.4) lib/rack/handler/webrick.rb:88:in `service'
  /Users/harshamv/.rbenv/versions/2.2.2/lib/ruby/2.2.0/webrick/httpserver.rb:138:in `service'
  /Users/harshamv/.rbenv/versions/2.2.2/lib/ruby/2.2.0/webrick/httpserver.rb:94:in `run'
  /Users/harshamv/.rbenv/versions/2.2.2/lib/ruby/2.2.0/webrick/server.rb:294:in `block in start_thread'

Remove the f. from the f.fields_for write like this Reference Link

<%= fields_for :company do |company| %>
  <div class="field">
    <%= company.label :name, 'Company' %>
    <%= company.text_field :name %>
  </div>
<% 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