我有创建两个对象并将其保存到数据库的表单。
我想做下一件事:
问题:
为nil调用id,这会 错误地是4错误
(找不到对象)。我在控制器中,在enveate动作@report = ReportMain.new并在行动中呈现该视图。
问题:
我的观点如下:
<%= form_for(@report, :url => {:action => 'encreate'}) do |f| %>
<%= render "shared/error_messages", :target => @report %>
<%= f.text_field(:amount) %>
<% fields_for @reporte do |r| %>
<%= r.check_box(:q_pripadnost) %>Pripadnost Q listi
<%= select_tag('nacinpakovanja',options_for_select([['Drveno bure', 'Drveno bure'], ['Kanister', 'Kanister'], ['Sanduk', 'Sanduk'], ['Kese', 'Kese'], ['Posude pod pritiskom', 'Posude pod pritiskom'], ['Kompozitno pakovanje', 'Kompozitno pakovanje'], ['Rasuto', 'Rasuto'], ['Ostalo', 'Ostalo']])) %>
<%= r.text_field(:ispitivanjebroj) %>
<%= r.text_field(:datumispitivanja) %>
<% end %>
<input id="datenow" name="datenow" size="30" type="text" value="<%= @date %>">
<div class="form-buttons">
<%= submit_tag("Unesi izvestaj") %>
</div>
&lt;%end%&gt;
在ReportController中创建肌动蛋白:
def encreate
@report = ReportMain.new
@reporte = ReportE.new
@reportparam = params[:report_main]
@report.waste_id = params[:waste][:code]
@report.warehouse_id = Warehouse.find_by_user_id(current_user.id).id
@report.user_id = current_user.id
@report.company_id = current_user.company_id
@report.amount = @reportparam[:amount]
@report.isimport = false
@report.isfinished = false
@report.reportnumber = ReportMain.where(:company_id => current_user.company_id, :isimport => false).count.to_i+1
if @report.save
@reporte.report_main_id = @report.id
else
redirect_to(:action => 'exportnew')
return
end
@reporte.vrstaotpada = params[:vrstaotpada]
@reporte.nacinpakovanja = params[:nacinpakovanja]
@reporte.ispitivanjebroj = @reportparam[:ispitivanjebroj]
@reporte.datumispitivanja = @reportparam[:datumispitivanja]
@reporte.q_pripadnost = @reportparam[:q_pripadnost]
@reporte.datumpredaje = @date
if @reporte.save
redirect_to(:action => 'show', :id => @reporte.id)
else
redirect_to(:action => 'exportnew')
end
end
答案 0 :(得分:0)
我认为你在这种情况下的问题是你使用redirect_to而不是render。当您使用redirect_to时,您将丢失当前操作中的所有变量。我可能会在你的encreate动作中做这样的事情:
if @reporte.save
render :show
else
render :exportnew
end
当您使用渲染时,它将使用当前操作中的变量,但使用您发送到render方法的操作中的视图。因此,当使用@report变量调用form_for时,它已经填充了发送给encreate的值。只要确保在不同的操作中使用相同的变量名称,但看起来你已经这样做了。