ユーザーモデルhave_many会社と会社belongs_toユーザー。Railsの1対多の関連付けを1対1の関連付けに移動するにはどうすればよいですか?
これを、has_one CompanyとCompany has_one/belongs_to associationのユーザーに変更します。
class User < ApplicationRecord
has_one :company #was has_many
accepts_nested_attributes_for :company
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
end
company.rb
class Company < ApplicationRecord
belongs_to :user
has_many :employees, inverse_of: :company
has_many :quotes, inverse_of: :company
accepts_nested_attributes_for :employees, reject_if: :all_blank, allow_destroy: true #, :reject_if => lambda { |e| e.first_name.blank? }
accepts_nested_attributes_for :quotes, allow_destroy: true
validates_presence_of :user, :co_name, :co_number, :postcode
validates :co_name, length: { minimum: 2, message: "minimum of 2 chars" }
validates :co_number, format: { with: /\A([1-9]\d{6,7}|\d{6,7}|(SC|NI|AC|FC|GE|GN|GS|IC|IP|LP|NA|NF|NL|NO|NP|NR|NZ|OC|R|RC|SA|SF|SI|SL|SO|SP|SR|SZ|ZC|)\d{6,8})\z/,
message: "must be valid company number" }
validates :postcode, format: { with: /\A(?:gir(?: *0aa)?|[a-pr-uwyz](?:[a-hk-y]?[0-9]+|[0-9][a-hjkstuw]|[a-hk-y][0-9][abehmnprv-y])(?: *[0-9][abd-hjlnp-uw-z]{2})?)\z/,
message: "must be valid postcode" }
enum industry: [ :financial_services, :architect, :business_consultancy ]
end
、私の会社では、この行を変更したrake db:reset
をしているとは#メソッドを作成
user.rb:私はこのように見てモデルを変更した
@company = current_user.companies.new(company_params)
~
@company = current_user.company.new(company_params)
しかし、私は
undefined method `new' for nil:NilClass
を得ていると私は間違っているつもりだところ、私は見ることができません。 current_user
は利用できるはずですか? has_one関連が定義されているので、company.newを呼び出すことができるはずです。私はしない;ユーザーにforeign_keyを追加する必要はありませんか?
誰かが間違っていると私を助けることができますか?ありがとうございました。
代わりに '@company = current_user.build_company(company_params)'を試してみてください。 – Pavan
'' .build_company'と '.company.new 'の違いは何ですか? (上記のように回答してください私は受け入れるよありがとう – jbk
私は私の答えを追加しました:) – Pavan