我收到错误"表单中的第一个参数不能包含nil或为空"对
<%= form_for @assessment, :method=>"get", :url => url_for(:action => 'new') do |f| %>
在提交无效后重新呈现:options页面时出现错误。我设置的方式有什么问题?
步骤1:用户需要在评估#选项
中选择模板和patient_id def options
@assessment = current_user.assessments.new
@patients = current_user.patients.sort_by{|e| e.first_name.downcase}
@patient = current_user.patients.new
@templates = Template.all
end
评估#选项视图:
<%= form_for @assessment, :method=>"get", :url => url_for(:action => 'new') do |f| %>
<% if @assessment.errors.any? %>
<div>
<%= pluralize(@assessment.errors.count, "error") %> prevented the account from being created:
<ul>
<% @assessment.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
...
<%= f.submit "Create Assessment", :class => "btn btn-primary", :style=>"width:100%;", :id=>"options-submit" %>
<% end %>
在提交时,我接受了这个动作:
def new
if params[:assessment][:template_id].present? && params[:assessment][:patient_id].present?
@assessment = current_user.assessments.new
@assessment.template = Template.find(params[:template_id])
@assessment.patient = current_user.patients.find(params[:patient_id])
else
render :options
end
end
答案 0 :(得分:1)
您需要@assessment
进行实例化。你可以把它移到条件之外。
def new
@assessment = current_user.assessments.new
if params[:assessment][:template_id].present? && params[:assessment][:patient_id].present?
@assessment.template = Template.find(params[:template_id])
@assessment.patient = current_user.patients.find(params[:patient_id])
else
render :options
end
end
答案 1 :(得分:0)
该行
render :options
不执行控制器中的操作选项。它仅使用新操作中的变量呈现视图。因此,您的实例变量实际上都没有被设置,因此您的表单会被删除。
尝试将options方法中的内容移动到if-then循环中。