0

私のルート.rb

  post 'home/create'
  get  'home/create'

私のホームコントローラー

   def create
       @review_n = Review.create(review_params)
       if @review_n.errors.empty?
         respond_to do |format|
           format.js { render 'create', locals: {review_name: @review_n.review_n, review_body: @review_n.review_body} }
         end
       else
         render 'index'
       end
    end      

私のcreate.js.erb

    $(function() {
      $(".wrap-body").append("<div> tmp </div>");
    });

レールは言う: HomeController#create の ActionController::UnknownFormat

ページをリロードせずに html.erb でデータを送信したい。お願い助けて!

更新:

私のhtml.rb

      <%= form_tag home_create_path, :method => 'post', :remote => true do %>
            <%= text_area_tag  'review[review_body]', nil  %>
            <%= text_field_tag 'review[review_name]', nil %>
            <%= submit_tag 'send' %>
      <% end %>
4

1 に答える 1

0

あなたのコードはブロックrender 'index'の外にある呼び出しをヒットしていますか?respond_to

通常、すべてのrender呼び出しをrespond_toブロック内に配置するため、ロジックのすべてのパスが予想されるすべての形式に応答できることは明らかです。

def create
  @review_n = Review.create(review_params)

  respond_to do |format|
    if @review_n.errors.empty?
      format.js { render 'create', locals: {review_name: @review_n.review_n, review_body: @review_n.review_body} }
    else
      format.js { render 'index' }
    end
  end
end

これには、 acreate.js.erbと an index.js.erb(エラーの場合) の両方が必要です。

また、@sahil が推奨するように、routes.rb で宣言しないでください。get 'home/create'このアクションはデータを変更するため、 経由でアクセスできるようにするのは安全ではありませんGET

于 2016-10-11T08:42:55.100 に答える