2016-07-03 4 views
0

私はサインアップのためのフォームを作成しています。クラスCompanyのcompanyという名前の属性を持つManagedCompanyという名前のクラスがあります。クラスCompanyは、Addressという別のクラスの属性を持っています。したがって、これらのクラスには作曲があります。OOPでのRubyと合成:simple_formで属性にアクセスするにはどうすればよいですか?

クラスは以下の通りである:

アプリ/モデル/ managed_company.rb

class ManagedCompany 
    include ActiveModel::Model 

    def initialize 
    @company = Company.new 
    end 

    attr_accessor :name, :string 
    attr_accessor :company, :Company 

end 

アプリ/モデル/ company.rb

class Company 
    include ActiveModel::Model 

    def initialize 
    @address = Address.new 
    end 

    attr_accessor :category, :string 
    attr_accessor :name, :string 
    attr_accessor :address, :Address 

    validates_presence_of :category 
    validates_presence_of :name 

end 

アプリ/モデル/address.rb

class Address 
    include ActiveModel::Model 

    attr_accessor :street, :string 
    attr_accessor :number, :string 

    validates_presence_of :street 
    validates_presence_of :number 

end 

マイ形式:

<%= simple_form_for @managed_company do |form| %> 

    <%= form.input :company.address.street, autofocus: true %> 

<% end %> 

しかし、この方法では動作しませんでした。エラーメッセージ:だから

undefined method `address' for :company:Symbol 

、フォーム(Ruby on Railsののsimple_form)で、どのように私はアドレスオブジェクトから属性ストリートにアクセスすることができますか?

編集:コントローラーのコードを追加

アプリ/コントローラ/ managed_companies_controller.rb

class ManagedCompaniesController < ApplicationController 

    def new 
    @managed_companies = ManagedCompanies.new 
    end 

    def create 
    @managed_companies = ManagedCompanies.new(secure_params) 
    if @managed_companies.valid? 

    else 
     render :new 
    end 
    end 

    private 

    def secure_params 
    params.require(:managed_companies).permit(:name) 
    end 

end 

アプリ/コントローラ/ companies_controller.rb

class CompaniesController < ApplicationController 

    def new 
    @company = Company.new 
    end 

    def create 
    @company = Company.new(secure_params) 
    if @company.valid? 

    else 
     render :new 
    end 
    end 

    private 

    def secure_params 
    params.require(:company).permit(:name) 
    end 

end 

アプリ/コントローラ/ addresses_controller.rb

class AddressesController < ApplicationController 

    def new 
    @address = Address.new 
    end 

    def create 
    @address = Address.new(secure_params) 
    if @address.valid? 

    else 
     render :new 
    end 
    end 

    private 

    def secure_params 
    params.require(:address).permit(:street) 
    end 

end 

答えて

0
<%= form.input @company.address.street, autofocus: true %> 
+0

はあなたの助けをいただき、ありがとうございます。私は今このエラーを受け取りました: 'undefined method 'address' for nil:NilClass'。私のオブジェクト会社がnullであると思われます。変数をインスタンス化する方法を知っていますか?私はデータベース上のフォームデータを保存したくないからです。モデルを作成し、リモートWebサービスに送信するだけです。 '%@company = Company.new%>'と '<%= @ company.address = Address.new%>'でフォーム上にこれらの変数をインスタンス化しようとしましたが、 'undefined method humanize ' nilのための:NilClass'。手伝って頂けますか? –

+0

あなたのapp/models/address.rbクラス名を見てください: "class Endereco"は "class Address"でなければなりませんか? これで解決できない場合は、投稿を最近のコードで更新し、コントローラコードを追加してください。ありがとう。 – fabriciofreitag

+0

申し訳ありません。私はコードをリファクタリングし、すべてのクラスとメソッドを書き直しています。私は職場でコードを更新できません。できるだけ早く私はそれを更新します。 –

関連する問題