создать один образец API в Rails, используя рельсы-апи камень и включен CORS указанного hereCORS с JQuery Ajax для Rails API
Я пытался операции апи Cr с помощью 'Advanced Rest API' в Chorme и работает нормально. Теперь я просто добавил одно приложение jQery для спама в Rails для использования API. Я просто поместил приложение jquery в общий каталог Rails API.
Мои методы get работают правильно, но не «PUT» и «PATCH». Мое клиентское приложение находится в одном приложении и машине, поэтому я думаю, что это не другой домен? я прав? Так что я уже включил CORS, но не работал. Я получил как 'ActionController :: RoutingError (нет маршрута матчей [OPTIONS] "/ API/v1/студентов/1"):'
Пожалуйста, помогите мне решить эту проблему ..
Моя страница клиента
<form>
<table role="presentation">
<tr><td>First name</td>
<td>
<input name="FirstMidName" data-val="true" data-val-required="First name is required" class="form-control">
<span class="field-validation-valid" data-valmsg-for="FirstMidName" data-valmsg-replace="true"></span>
</td>
</tr>
<tr><td>Last name</td>
<td>
<input name="LastName" class="form-control" data-val="true" data-val-required="Last name is required" >
<span class="field-validation-valid" data-valmsg-for="LastName" data-valmsg-replace="true"></span>
</td>
</tr>
<tr>
<td>Enrollment date</td>
<td>
<input name="EnrollmentDate" class="form-control" data-val="true" data-val-required="Enrollment date is required" >
<span class="field-validation-valid" data-valmsg-for="EnrollmentDate" data-valmsg-replace="true"></span>
</td>
</tr>
</table>
<input type="hidden" name="id" />
<input type="hidden" name="_method" value="PUT" />
<input type="submit" value="update" class="btn btn-default" onclick="return updateData(this)"/>
</form>
<script>
function Success(result){
alert("Data Saved successfully");
window.location.hash="#contact-list";
}
function Failure(err){
alert("Error");
}
function updateData(_this){
$.ajax({
url: "http://localhost:3000/api/v1/students/1",
type: 'PUT',
data:$(this).closest('form').serialize(),
success : function(result){
alert('done');
},
error : function(xhr, txt, err){
alert(err);
}
});
return false;
}
</script>
И мой базовый контроллер
class Api::BaseController < ApplicationController
before_filter :cors_preflight_check
after_filter :cors_set_access_control_headers
def cors_set_access_control_headers
headers['Access-Control-Allow-Origin'] = '*'
headers['Access-Control-Allow-Methods'] = 'POST, GET, PUT, DELETE, OPTIONS'
headers['Access-Control-Allow-Headers'] = 'Origin, Content-Type, Accept, Authorization, Token'
headers['Access-Control-Max-Age'] = "1728000"
end
def cors_preflight_check
if request.method == :options
headers['Access-Control-Allow-Origin'] = '*'
headers['Access-Control-Allow-Methods'] = 'POST, GET, PUT, DELETE, OPTIONS'
headers['Access-Control-Allow-Headers'] = 'X-Requested-With, X-Prototype-Version, Token'
headers['Access-Control-Max-Age'] = '1728000'
render :text => '', :content_type => 'text/plain'
end
end
end
И мой маршрут
namespace :api, :defaults => {:format => :json} do
namespace :v1 do
controller :students, path: '/students/:id' do
match 'post_action', via: [ :post, :options]
end
resources :students
end
end
Почему вы не используете ['rack-cors'] (https://rubygems.org/gems/rack-cors/versions/0.3.1). – albertjan
ничего особенного. Я думал, это просто. Я попробую это тоже – Akhil
Я закончил со стойками. спасибо .. но u этот метод получил erros – Akhil