Rails在控制器中形成params更改

时间:2011-02-21 00:59:24

标签: ruby-on-rails ruby-on-rails-3 params

我有一张表格:

<%= form_for(:report_main, :url => {:action => 'exporttoxiccreate'}) do |f| %>
<%= collection_select(:waste, :code, Waste.find_all_by_istoxic(false), :id, :code, :include_blank => '') %>
<%= f.check_box(:q_pripadnost) %>
<%= f.text_field(:amount) %>
<% end %>

和控制器中的代码:

def exporttoxiccreate
    @report = ReportMain.new
    @reportexport = ReportExport.new
    @reportparam = params[:report_main]

    @report.waste_id = @reportparam.waste.code
    @report.amount = @reportparam.amount

    if @report.save
      @reportexport.report_main_id = @report.id
    else
      redirect_to(:action => 'exporttoxicnew')
    end

    @reportexport.q_pripadnost = @reportparam.q_pripadnost

    if @reportexport.save
      redirect_to(:action => 'show', :id => @reportexport.id)
    else
      redirect_to(:action => 'exporttoxicnew')
    end
  end

我想保存在两个表中,在这个表单的两个对象数据中,我需要将params分开来进行操作。我试过这个:

@reportexport.q_pripadnost = @reportparam.q_pripadnost

我想在@reportexport中设置q_pripadnost字段,其中包含一些来自param的值。

哪里出错?

1 个答案:

答案 0 :(得分:1)

当你从Rails中的一个表单中获取params时,它会以hash形式出现。例如:

params[:report_main][:waste]
params[:report_main][:amount]

因此,当您调用@reportparam = params[:report_main]时,您将@reportparam设置为哈希值,但之后您尝试将其用作对象。例如,使用@reportparam.q_pripadnost

代替@reportparam[:q_pripadnost]

您可以通过临时更改操作以显示变量的文本版本来仔细查看变量,例如:

def exporttoxiccreate
    @reportparam = params[:report_main]
    render :text => @reportparam.to_yaml
end