Rails формируют параметры, изменяющиеся в контроллере - PullRequest
1 голос
/ 21 февраля 2011

У меня есть форма:

<%= 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

Я хочу сохранить в двух таблицах, в двух объектах данные из этой формы, и мне нужно разделить параметры для манипуляции. Я пробовал с этим:

@reportexport.q_pripadnost = @reportparam.q_pripadnost

Я хочу установить поле q_pripadnost в @reportexport с некоторым значением из param. Где я ошибаюсь?

1 Ответ

1 голос
/ 21 февраля 2011

Когда вы получаете параметры из формы в Rails, она появляется в виде хэша.Например:

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
...