2016-10-30 4 views
0

Я новичок в Ruby on Rails и в настоящее время пытаюсь создать небольшой тестовый веб-сайт для меня. У меня есть проблема в моем коде, в котором указывается «неопределенный метод` service_providers »для # " строка кода, которая производит ошибку заключается в следующем:Неопределенный метод, когда .build new Object

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

Моя база данных Модель Таблица„Пользовательские“HAS_ONE„ServiceProvider“has_many„Услуги“. Я использую 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 
Смежные вопросы