【问题标题】:Undefined Method when .build new Object.build new Object 时的未定义方法
【发布时间】:2016-10-30 21:20:31
【问题描述】:

我是 Ruby on Rails 的新手,目前正在尝试为我创建一个小型测试网站。我的代码中有一个问题,指出“# 的未定义方法 `service_providers'” 产生错误的代码行如下:

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

我的数据库模型是表 "User" has_one "ServiceProvider" has_many "Services"。 我将 ruby​​gem “设计”用于用户模型。 我试图在我的示例应用程序中转移“Ruby on Rails 教程”(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-Helper

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

如果缺少一些需要帮助的编码,请询问。我是使用 ruby​​ 编码的新手,但我认为必须是所涉及代码的相关部分。 感谢您的帮助。

【问题讨论】:

    标签: ruby-on-rails devise


    【解决方案1】:

    如果您有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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-08
      • 1970-01-01
      • 2016-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多