.build new Object

时间:2016-10-30 21:20:31

标签: ruby-on-rails devise

我是Ruby on Rails的新手,目前正在尝试为我制作一个小测试网站。我的代码中存在一个问题,即一个未定义的方法`service_providers'为#" 产生错误的代码行如下:

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

我的数据库模型是表"用户" has_one" ServiceProvider" has_many"服务"。 我使用rubygem"设计"对于用户模型。 我试图转移" Ruby on Rails Tutorial"的微博的想法。 (https://www.railstutorial.org/book/user_microposts)在我的示例应用中。在代码清单13.36中还有这个代码,因为这个ruby知道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进行编码的新手,但我认为必须是涉及的代码的相关部分。 谢谢你的帮助。

1 个答案:

答案 0 :(得分: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