表单中的第一个参数不能包含nil或为空form_for:method =>" get"

时间:2015-05-29 23:37:11

标签: ruby-on-rails forms

我收到错误"表单中的第一个参数不能包含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

2 个答案:

答案 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循环中。