我对Rails相当新,我有一个新手问题。
我有三种模式:
用户 - <客户 - <项目
要创建一个新项目,我想在我的项目控制器中执行此操作:
def create
@project = current_user.projects.build(params[:project])
end
但是,我总是得到一个错误,说客户端ID缺失,即我无法在Projects表中设置。
有人能告诉我这里缺少什么吗?
在我的用户模型中,我有......
has_many :projects, :through => :clients
......我认为应该这样做
@user.projects.build()
的工作。但事实并非如此。
答案 0 :(得分:1)
我认为您的项目表/模型需要在使用
时指定使用的client_idcurrent_user.projects.build(params[:project])
我认为你应该使用像
这样的东西active_project = current_user.active_project
active_project.clients.build(params[:project])
这只是一个例子。
答案 1 :(得分:1)
通过您的关联,Project
属于属于Client
的{{1}}。您可能需要考虑重新设计。
但是如果您希望保留当前的设计,可以通过几种方式修复此错误
User
OR
@client = Client.find params[:client]
@project = @user.project.build params[:project], :client_id => @client.id
无论哪种方式,用户都没有项目。他们有客户,而这些客户又有项目。您可能希望将@project = @user.clients.find(params[:client]).projects.build(params[:project])
模型作为连接模型。在这种情况下......
Project
答案 2 :(得分:1)
进行该调用时出现的问题是哪个客户端进行此操作?仅在current_user.projects
上构建并不提供此信息。要解决这个问题,我们必须查看您的表单和/或路由,以提供要使用的客户端的信息。
例如,您可以让表单实际上以客户端开头,并在表单中使用嵌套资源,然后提供新项目。