我有以下内容:
客户有许多报告和报告属于客户。
但是在创建报告时,没有将client_id分配到数据库中,但不确定原因?
我在这里做错了吗?
客户端模型
class Client < ActiveRecord::Base
has_many :reports, :dependent => :destroy
end
报告模型
class Report < ActiveRecord::Base
has_attached_file :report
belongs_to :client
end
客户端控制器(更新)
# PUT /clients/1
# PUT /clients/1.json
def update
@client = Client.find(params[:id])
respond_to do |format|
if @client.update_attributes(params[:client])
format.html { redirect_to [:admin,@client], :notice => 'Client was successfully updated.' }
format.json { head :ok }
else
format.html { render :action => "edit" }
format.json { render :json => @client.errors, :status => :unprocessable_entity }
end
end
end
报告控制器(创建)
# POST /reports
# POST /reports.json
def create
@report = Report.new(params[:report])
@report.client_id = params[:client][:client_id]
respond_to do |format|
if @report.save
format.html { redirect_to '/admin/clients', :notice => 'Report was successfully created.' }
format.json { render :json => @report, :status => :created, :location => @report }
else
format.html { render :action => "new" }
format.json { render :json => @report.errors, :status => :unprocessable_entity }
end
end
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 %>
将不胜感激!
答案 0 :(得分:1)
client_id在您的视图中的表单中没有相关的输入字段。您可以在表单中添加一些内容,例如:
f.hidden_field :client_id
然后在您的控制器中,将其设置为:
@report.client_id = params[:report][:client_id]
或者,您可以在网址中包含client_id。
答案 1 :(得分:1)
.build
,所以客户端可能已经在网址中。
如果删除该怎么办:
@report.client_id = params[:client][:client_id]
并提交,然后会发生什么?因为这条线在params看起来不正确,所以我想知道你是否覆盖了form_for
或者像@Adam这样的隐藏字段会起作用。
答案 2 :(得分:0)
愚蠢的错误似乎需要提升表单上的结束功能 - 供客户端在打开表单之前关闭它 - 用于报告。
然后为client_id添加字段,现在根据Adam建议隐藏字段。
感谢Steph的建议,因为这有助于我解决这个错误。
谢谢大家! : - )