2017-01-11 4 views
3

Я пытаюсь выполнить кросс-платформенный запрос в рельсах.Rails CORS: ActionController :: RoutingError (Нет совпадений маршрута [ОПЦИИ] "/ партии"):

Мой JQuery код выглядит следующим образом: -

<script> 
    $.ajaxSetup({ 
     headers: { 
     'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content') 
     } 
    }); 
    $(document).ready(function() { 
     $('#submit-button').click(function() { 
      $.ajax({ 
       type: "POST", 
       url: "http://localhost:3000/batches", 
       beforeSend: function(xhr) {xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'))}, 
       xhrFields: { 
        withCredentials: true 
       }, 
       data: {  
        batch: { 
         name: $("#name").val(), 
         course_id: $("#course_id").val(), 
         start_date: $("#start_date").val(), 
         end_date: $("#end_date").val(), 
         status: $("#batch_status").val(), 
         } 
       }, 
       dataType: "JSON", 
       error: function(error) { 
        console.log(error); 
         }, 
       success: function(data) { 
         console.log(data); 
         return false; 
         }, 
      }) 
     }); 
    }) 
</script> 

И мой контроль состоит в следующем: -

def new 
    @batch = Batch.new 
    respond_to do |format| 
     format.json 
     format.html 
    end 
    end 

    def create 
    @batch = Batch.new(batch_param) 
    respond_to do |format| 
     if @batch.save 
     format.json { render json: @batch, status: :created, location: @batch } 
     format.html { redirect_to @batch, notice: "Save process completed!" } 
     else 
      format.html { 
      flash.now[:notice]="Save proccess coudn't be completed!" 
      render json: @batch.errors, status: :unprocessable_entity 
      } 
      format.json { render json: @batch.errors, status: :unprocessable_entity} 
     end 
    end 
    end 
def batch_param 
     params.require(:batch).permit(:name, :course_id, :start_date, :end_date, :status) 
    end 

Но каждый раз, когда я пытаюсь добавить запись с помощью сформировать его показывает следующее сообщение об ошибке в рельсы войти: -

Ошибка, когда я представить свои первые данные

Started OPTIONS "/batches" for 127.0.0.1 at 2017-01-11 22:02:49 +0545 
    ActiveRecord::SchemaMigration Load (0.5ms) SELECT "schema_migrations".* FROM "schema_migrations" 

ActionController::RoutingError (No route matches [OPTIONS] "/batches"): 

Ошибка, когда я отправить данные еще на один раз: -

Started OPTIONS "/batches" for 127.0.0.1 at 2017-01-11 22:08:50 +0545 

ActionController::RoutingError (No route matches [OPTIONS] "/batches"): 

Может кто-нибудь помочь мне в этой проблеме.

ответ

2

Вам необходимо настроить Rails для поддержки CORS.

Одним из решений является использование драгоценного камня rack-cors.

Следующая отрезала будут необходимы, чтобы быть добавлены в конфигурации/application.rb

module YourApp 
    class Application < Rails::Application 

    # ... 

    # Rails 3/4 

    config.middleware.insert_before 0, "Rack::Cors" do 
     allow do 
     origins '*' 
     resource '*', :headers => :any, :methods => [:get, :post, :options] 
     end 
    end 

    # Rails 5 

    config.middleware.insert_before 0, Rack::Cors do 
     allow do 
     origins '*' 
     resource '*', :headers => :any, :methods => [:get, :post, :options] 
     end 
    end 

    end 
end 
+0

Да он работал, но он дал поднять на новую проблему ... теперь он говорит ActionController :: InvalidAuthenticityToken (ActionController: : InvalidAuthenticityToken): –

+0

Вам нужно убедиться, что вы правильно проходите токен аутентичности. Проверьте это: http://stackoverflow.com/questions/7203304/warning-cant-verify-csrf-token-authenticity-rails –

+0

Извините, но я уже пробовал ... –

Смежные вопросы