2016-10-30 4 views
0

私はRuby on Railsの新機能で、現在私のために少しテスト用のウェブサイトを作ろうとしています。私のコードでは、 "定義されていないメソッド` service_providers ' 『ユーザー『にhas_one 『のServiceProvider』にhas_many』サービス:"未定義のメソッド.build new Object

def new 
    @service_provider = current_user.service_providers.build(serviceprovider_params) 
end 

私のデータベースモデルは、表でエラーが発生したコードの 行は次のようです』。 私はユーザーモデルにrubygem "devise"を使用します。 私のサンプルアプリケーションでは、 "Ruby on Railsチュートリアル"(https://www.railstutorial.org/book/user_microposts)のマイクロポストのアイデアを転送しようとしました。リスト13.36にはこのコードもあります。このルビでは、current_userとmicrrpostの間の参照が分かっているからです。ある場合

モデル

class ServiceProvider < ApplicationRecord 
    belongs_to :user 
    has_many :service 

    validates :name, presence: true 
    validates :street, presence: true 
    validates :plz, presence: true 
    validates :location, presence: true 
    validates :user_id, presence: true 

end 

コントローラ

class ServiceProvidersController < ApplicationController 
    before_action :set_serviceprovider, only: [:show, :edit, :update] 
    before_action :authenticate_user! 

    def index 
    end 

    def show 
    end 

    def new 
    @service_provider = current_user.service_providers.build(serviceprovider_params) 
    end 

    def create 
    @service_provider = current_user.service_provider.build(serviceprovider_params) 
    if @service_provider.save 
     redirect_to @service_provider, notice: "Gespeichert" 
    else 
     render :new 
    end 
    end 

    def edit 
    end 

    def update 
    end 

    private 
    def set_serviceprovider 
     @service_provider = Service_Provider.find(params [:id]) 
    end 

    def serviceprovider_params 
     params.require(:service_provider).permit(:name, :street, :plz, :location) 
    end 
end 

のServiceProviderヘルパー

module ServiceProvidersHelper 
    def current_service_provider 
    @current_service_provider = service_provider.user_id.find(current_user.id) 
    end 
end 

を: 私はそれが私のコードで作業していない理由のアイデアを持っていませんあなたの助けが必要なコーディングが不足している場合は、お尋ねください。私はRubyでコーディングする初心者ですが、tahtは関係するコードの関連部分でなければならないと思います。 ありがとうございます。

答えて

0

あなたがhas_one関連を持っているなら、あなたはbuild_ASSOCIATION_NAMEを使用する必要があるので、この場合には、それはbuild_service_provider

@service_provider = current_user.build_service_provider(serviceprovider_params) 

になります。また、私はあなたがこの関連で

class ServiceProvider < ApplicationRecord 
    belongs_to :user 
    has_many :service 
を見てする必要があると思います

has_manyとの関連付けを構築する場合、クラス名は複数である必要があります。

has_many :services 
に変更し、それを
関連する問題