Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 属于/有许多关系_Ruby On Rails_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 属于/有许多关系

Ruby on rails 属于/有许多关系,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我有以下资料: 客户机有许多报告,报告属于一个客户机 但是,在创建报告时,它没有将客户端id分配到数据库中,但不确定原因是什么 我做错什么了吗 客户机模型 class Client < ActiveRecord::Base has_many :reports, :dependent => :destroy end 报表控制器(创建) 客户端编辑视图 <%= form_for([:admin, @client.reports.build]) do |f| %>

我有以下资料:

客户机有许多报告,报告属于一个客户机

但是,在创建报告时,它没有将客户端id分配到数据库中,但不确定原因是什么

我做错什么了吗

客户机模型

class Client < ActiveRecord::Base
  has_many :reports, :dependent => :destroy
end
报表控制器(创建)

客户端编辑视图

<%= form_for([:admin, @client.reports.build]) do |f| %>
   <label class="formlabel">Report Upload</label>
   <%= f.file_field :report, :class=>"text-input small-input"  %> 
  <div class="actions">
    <br />
   <%= f.submit 'Upload', :class => 'button' %>
  </div>
<% end %>   

报告上传
“文本输入小输入”%>

'按钮'%>

我们将不胜感激

客户端id在视图的表单中没有相关的输入字段。您可以在表单中添加以下内容:

f.hidden_field :client_id
然后在控制器中,将其设置为:

@report.client_id = params[:report][:client_id]

或者,您可以在url中包含客户id。

我很好奇;由于您使用的是表单_for中的
.build
,因此客户端可能已经在url中

如果删除:

@report.client_id = params[:client][:client_id]
那么,接下来会发生什么呢?因为这一行没有正确地查看参数,所以我想知道您是否正在覆盖您为


要么这样,要么像@Adam said这样的隐藏字段就行了。

愚蠢的错误似乎需要在表单上设置end函数,以便客户端在打开报表表单之前关闭它

然后添加客户机id的字段,现在根据Adam的建议隐藏该字段

谢谢Steph的建议,因为这有助于我解决这个错误


谢谢大家!:-)

您能否验证是否正在为
参数[:client][:client\u id]
设置值?如果不是,则通过将
@client.reports.build设置为nil,您就可以撤消
@client.reports.build的工作。AFAIK当使用
.build
方法初始化子对象时,当您运行
.save
时,它应该会自动为您设置外键。您可以向我们显示创建/更新操作的参数吗?不知道我是否理解您的意思更新操作在上面请快速阅读,每次您向服务器请求执行某项操作(例如,POST、GET)时,params散列变量都会被发送到相应的控制器操作中,并附带信息。在您的情况下,它将发送表单中收集的数据以构建新的报表对象。通过查看控制台中的服务器日志,您可以确切地了解发送的内容。我们感兴趣的是表单中是否为
client\u id
设置了一个值。Hi Adam客户端id位于URL中,就像它位于客户端模型的编辑函数中一样/clients/:id/editOK,所以它类似于/clients/:client\u id/reports/new?如果是这样,那么您只需执行@report.client\u id=params[:client\u id]。这不一定是世界上最安全的事情(除非你有一些控件,他们可以通过任何他们想要的客户端id发送),但它应该可以工作。对不起,URL只是clients/1/edit,在这个视图中是报告的上传表单,不需要额外的URL。现在已尝试但未成功我没有收到任何错误,但报告表中的客户端id仍然为空。隐藏的\u字段:客户端id,:value=>params[:id]
为您做些什么?隐藏字段提供相同的无错误记录在数据库中创建,但客户端id为空。如果我将其删除,则报告记录在数据库中创建,但客户端id字段为空(因此不创建到客户端的链接),谢谢运行
rake routes
,这条路线是什么?是
/clients/:client_id/reports/new
?请让我知道当你耙的时候路由是什么,以及它说它要去哪个控制器,等等。嗨,路由是/clients/:clients\u id/edit,我正试图在clients控制器的编辑操作中做到这一点。不过,我已经从数据库和表单中删除了该列,现在正在寻找一种可行的方法。你有什么建议?很高兴你把它弄明白了!
f.hidden_field :client_id
@report.client_id = params[:report][:client_id]
@report.client_id = params[:client][:client_id]