我是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进行编码的新手,但我认为必须是涉及的代码的相关部分。 谢谢你的帮助。
答案 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