7

私は simple_form gem を使用しており、次のように remote:true オプションを指定しているフォームを生成しています:

<%= simple_form_for @webinar, validate: true, remote:true do |f| %>

したがって、フォームの出力 html は次のフラグメントになります。

<form accept-charset="UTF-8" action="/webinars" class="simple_form new_webinar" data-remote="true" data-validate="true" enctype="multipart/form-data" id="new_webinar" method="post" novalidate="novalidate"> ... </form>

私が確認したように、標準のform_forヘルパーを使用すると、 remote:trueオプションが使用されているときにdata-remote='true'がフォームに追加されます。生成された html からわかるように、simple_form gem を使用している場合にも、そのような属性があります。

したがって、私のコントローラーには次のものがあります。

def create
  @webinar = Webinar.new(params[:webinar])

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

ただし、常にformat.htmlが使用されます。私は何を間違っていますか?

編集:

私は logger.debug request.format を使用して、実際のフォーマットが何を求めているかを確認し、ログファイルで次のようにしました。

テキスト/html

したがって、問題は simple_form で生成されたフォームにあるに違いありません。

4

3 に答える 3

2

simple_formが期待どおりに機能しない理由を理解するのに多くの時間を費やしたとは信じられません。

最後に、私はすべてを正しい方法で行ったようで、問題の原因は次のとおりです。

AJAX はファイルのアップロードには使用できません。

私の問題を解決するには、次の gem をGemfileに追加し、 bundle installコマンドを実行するだけです。

gem 'remotipart', '~> 1.0'

次に、 application.jsファイルに次の行を追加します。

//= jquery.remotipart が必要

詳細情報:

  1. リモートパーツの宝石
  2. jQueryを使って複数のファイルをアップロードする方法
于 2013-06-08T18:31:10.293 に答える
2

生成されたフォーム アクションで JSON 形式のドキュメントを直接要求していないようです。おそらく 1 つのオプションは、次の手法を使用してルート ファイルに設定:formatすることです: http://guides.rubyonrails.org/routing.html#defining-defaultsjson

:defaults オプションにハッシュを指定することで、ルートに他のデフォルトを定義することもできます。これは、動的セグメントとして指定しないパラメーターにも適用されます。例えば:

match 'photos/:id' => 'photos#show', :defaults => { :format => 'jpg' }

Rails は photos/12 を PhotosController の show アクションに一致させ、params[:format] を "jpg" に設定します。

于 2013-06-07T21:45:19.403 に答える