1

レール3は部分的に形成されます

<%= form_for(answer, :remote => true) do |f| %>
  <% if answer.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(answer.errors.count, "error") %> prohibited this answer from being saved:</h2>
      <ul>
        <% answer.errors.full_messages.each do |msg| %>
            <li><%= msg %></li>
        <% end %>
      </ul>
    </div>
  <% end %>
  <div class="field">
    <%= f.hidden_field :conduct_evaluation_id, :value => conduct_evaluation.id %>
  </div>
  <div class="field">
      <%= f.hidden_field :question_id, :value => question.id %>
  </div>
  <div class="field">
    <%= f.hidden_field :program_block_id, :value => conduct_evaluation.program_block_id %>
  </div>
  <div class="field">
    <%= f.radio_button :answer, true, :onchange => "$(this.form).trigger('submit.rails');" %>yes<br/>
    <%= f.radio_button :answer, false, :onchange => "$(this.form).trigger('submit.rails');" %>no<br/>
  </div>
  <div class="actions">
    <%= f.submit "Answer" %>
  </div>
<% end %>

コントローラのアクション

  # POST /answers
  # POST /answers.json
  def create
    @answer = Answer.new(params[:answer])
    @answer.user = current_user
    @answer.conduct_evaluation = ConductEvaluation.find(params[:answer][:conduct_evaluation_id])

    respond_to do |format|
      if @answer.save
        format.js { }
        format.html { redirect_to @answer, notice: 'Answer was successfully created.' }
        format.json { render json: @answer, status: :created, location: @answer }
      else
        format.js { }
        format.html { render action: "new" }
        format.json { render json: @answer.errors, status: :unprocessable_entity }
      end
    end
  end

  # PUT /answers/1
  # PUT /answers/1.json
  def update
    @answer = Answer.find(params[:id])

    respond_to do |format|
      if @answer.update_attributes(params[:answer])
        format.js { }
        format.html { redirect_to @answer, notice: 'Answer was successfully updated.' }
        format.json { head :no_content }
      else
        format.js { }
        format.html { render action: "edit" }
        format.json { render json: @answer.errors, status: :unprocessable_entity }
      end
    end
  end

javascriptをajax経由で送信させるために私が間違っていることを誰かに教えてもらえますか?送信ボタンを使用すると、リクエストはajax経由で送信されます。ラジオボタンのonchangeイベントを使用して、JavaScriptを介してフォームを送信しようとすると、リクエストはHTMLであると見なされます。

どんな助けでも大歓迎です!

-J

編集: フォームの送信ボタンを使用すると、リクエストが少し異なります。

Processing by AnswersController#create as JS
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"IcJkV1GnIOEGRs7kaRuVQsp0sTNtHQw0Q+HMM7m/mV0=", "answer"=>{"conduct_evaluation_id"=>"15", "question_id"=>"1", "program_block_id"=>"1", "answer"=>"true"}, "commit"=>"Answer"}

onchangejavascriptを使用してrails.submitイベントをトリガーするのとは対照的です。

Processing by AnswersController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"IcJkV1GnIOEGRs7kaRuVQsp0sTNtHQw0Q+HMM7m/mV0=", "answer"=>{"conduct_evaluation_id"=>"15", "question_id"=>"1", "program_block_id"=>"1", "answer"=>"true"}}

なぜこれが起こっているのか誰かが知っていますか?submit.railsイベントをトリガーするときに追加のパラメーターを指定する必要がありますか?助けてください!:-D

編集2: それで私は回避策を見つけました。ラジオボタンの変更イベントを実際に送信ボタンをクリックするようにバインドすると機能します。これは理想的な解決策ではありませんが、少なくとも機能します。

編集3: 私は次のコーヒースクリプトを決定しました:

$(document).ready ->
    $('#my_form input:submit').hide()
    $('#my_form input:radio').change ->
        $.ajax
            type: $(this.form).attr('method')
            url: $(this.form).attr('action')
            data: $(this.form).serialize()
            dataType: 'script'

これにより、対応するjsアクションファイルが応答として返され、成功すると自動的に実行されます。

4

1 に答える 1

0

onchange()Railsの魔法をバイパスして、希望どおりにフォームを送信しないようにします。独自の変更方法を記述します、fe:

$('input.radio_button_selector').change( function() {
    $.ajax({
        url: $('#my_form').attr('action'),
        data: $('#my_form').serialize()
    });
});
于 2013-01-08T16:49:16.760 に答える