0

新しいガイドラインを送信しようとすると、フォームにエラー メッセージが表示されます (ガイドラインが正しく検証に失敗したため)... @specialties のリストが正しくリロードされません (つまり、エラーで送信する前に表示された適切なリスト)。ここではどの部分が間違っているのかわかりません...

ビュー _form.html.erb

<%= simple_form_for(@guideline, html: {class: "form-horizontal"}) do |f| %>
  <% if @guideline.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@guideline.errors.count, "error") %> prohibited this guideline from being saved:</h2>

      <ul>
      <% @guideline.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>


  <%= f.input :title, label: 'Title (e.g. Asthma for under 12 months)' %>
  <%= f.input :specialty, as: :select, collection: @specialties %> 
  <%= f.input :hospital %>
  <%= f.input :content, as: :string, label: 'Link' %>


  <div class="form-actions">
    <%= f.button :submit, :class => "btn btn-info btn-large" %>
  </div>
<% end %>

ガイドライン_コントローラー.rb

 def new
    @guideline = Guideline.new
    @specialties = Guideline.order(:specialty).uniq.pluck(:specialty)

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @guideline }

    end
  end



def create
@guideline = current_user.guidelines.new(params[:guideline])



respond_to do |format|
  if @guideline.save
    format.html { redirect_to @guideline, notice: 'Guideline was successfully created.' }
    format.json { render json: @guideline, status: :created, location: @guideline }
  else

    @specialties = Guideline.order(:specialty).uniq.pluck(:specialty)
    format.html { render action: "new" }
    format.json { render json: @guideline.errors, status: :unprocessable_entity }
  end
end

終わり

4

1 に答える 1

1

これは一般的なエラーです。新しいテンプレートで必要になるため、検証が失敗した場合は、作成アクションで @specialties を宣言する必要があります。

def create
  @guideline = Guideline.new params[:guideline]

  if @guideline.save
  else
    # you need to declare @specialties here since it is needed in the new template
    # which you want to render
    @specialties = Specialty.all
    render :new
  end
end
于 2013-02-20T10:00:56.243 に答える