0

我有以下内容:

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

但是,在创建报告时,它没有将 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 %>   

协助将不胜感激!

4

3 回答 3

1

client_id 在您的视图中的表单中没有相关的输入字段。您可以在表单中添加一些内容,例如:

f.hidden_field :client_id

然后在您的控制器中,将其设置为:

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

或者,您可以在 url 中包含 client_id。

于 2012-10-15T21:19:21.177 回答
1

我很好奇; 因为您.build在 form_for 中使用,所以客户端可能已经在 url 中。

如果您删除:

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

并提交,然后会发生什么?因为这条线在参数上看起来不正确,所以我想知道你是否覆盖了你在form_for

要么这样,要么像@Adam 说的隐藏字段都可以。

于 2012-10-15T21:23:35.607 回答
0

愚蠢的错误似乎需要在表单上打开最终功能,以便客户在打开报表之前关闭它。

然后为 client_id 添加字段,现在按照 Adam 的建议隐藏该字段。

感谢 Steph 的建议,因为这可以帮助我解决这个错误。

谢谢大家!:-)

于 2012-10-18T08:56:21.793 回答