2017-07-04 23 views
0

ユーザーモデル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を追加する必要はありませんか?

誰かが間違っていると私を助けることができますか?ありがとうございました。

+1

代わりに '@company = current_user.build_company(company_params)'を試してみてください。 – Pavan

+0

'' .build_company'と '.company.new 'の違いは何ですか? (上記のように回答してください私は受け入れるよありがとう – jbk

+0

私は私の答えを追加しました:) – Pavan

答えて

1

nilのための「未定義のメソッド `新しい:NilClass

has_oneのために、あなたはbuild_associationメソッドを使用する必要があり、そう

@company = current_user.company.new(company_params) 

ここ

@company = current_user.build_company(company_params) 

でなければなりませんaはすべてのavailable methodsのリストhas_oneアソシエイティブ

+0

ありがとう@pavan、それはそれを解決しました。 – jbk

関連する問題