Я очень новичок в веб-разработке, и, возможно, это глупая ошибка, но я не могу найти подходящую документацию для этого.
Я работаю над проектом с RoR и угловым: онлайн-каталог для автозапчастей, где пользователь может фильтровать продукты, предоставляя определенную информацию (бренд, модель, год и т.д.).
Я уже подключил базу данных компании к RoR, имею модель и контроллер (у которого есть "выбор" запроса к базе данных) и может консультироваться с консолью рельсов. У меня есть угловая фабрика и контроллер, который подключен к контроллеру рубина, и я могу распечатать информацию базы данных в угловом режиме.
Проблема в том, что когда я пытаюсь передать параметры для определенного поиска, я получаю внутреннюю ошибку сервера GET 500.
Возможно, я делаю что-то неправильно, так как я начинаю учиться. Технически я пытаюсь обновить представление, чтобы показать информацию, основанную на параметрах контроллера, заданных пользователем. Я оставлю несколько скриншотов для понимания.
Мой угловой модуль с фабрикой и контроллером
angular.module('AppAutored', ['ngResource','ui.router', 'ui.bootstrap'])
.factory("Product", function($resource) {
return $resource("products/:id/:marca/:modelo/:anhio", { id: '@id', marca: '@marca', modelo: '@modelo', anhio: '@anhio'}, {
index: { method: 'GET', isArray: true, responseType: 'json' }
});
})
.controller('MainCtrl', [
'$scope',
'Product',
function($scope, Product) {
$scope.getProducts = function () {
$scope.products = Product.index({id: $scope.model_codigo});
}
$scope.clear =function(){
$scope.filtro = {};
};
}
]);
Модель Rails для таблицы "товары"
class Product < ActiveRecord::Base
#has_one :lineasprod
self.table_name = "productos"
end
Контроллер Rails, где я делаю выбор в базе данных (и пытаюсь поймать параметры из углового контроллера (: codigo) и, где я предполагаю, является ошибкой.
class ProductsController < ApplicationController
respond_to :json
def index
@products = Product.select("productos.cod_prod, lp.nombre as linea, se.nombre as sistema, me.nombre as marca, mode.nombre as modelo, ae.año_equipos as anhio")
.where("productos.cod_prod = '(params[:codigo])' AND me.nombre = 'Honda' AND mode.nombre LIKE '%Accord%' AND pe.año_equipos = '2007'")
.joins("INNER JOIN lineas_productos lp ON lp.linea_producto = productos.linea_producto
INNER JOIN sistemas_equipos se ON se.sistema_equipos = productos.sistema_equipos
INNER JOIN productos_equipos pe ON pe.cod_prod = productos.cod_prod
INNER JOIN marcas_equipos me ON me.marca_equipos = pe.marca_equipos
INNER JOIN modelos_equipos mode ON pe.marca_equipos = mode.marca_equipos AND mode.modelo_equipos = pe.modelo_equipos
INNER JOIN años_equipos ae ON pe.año_equipos = ae.año_equipos")
.first(250)
respond_with(@products)
end
end
файл маршрутов
Rails.application.routes.draw do
resources :products, defaults: { format: 'json' }
root to: 'application#angular'
#get 'index/products/:codigo' => "products#index"
контроллер приложения
class ApplicationController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception
respond_to :json
def angular
render 'products/index'
end
def show
render 'products/index'
end
def set_csrf_cookie_for_ng
cookies['XSRF-TOKEN'] = form_authenticity_token if protect_against_forgery?
end
protected
def verified_request?
super || valid_authenticity_token?(session, request.headers['X-XSRF-TOKEN'])
end
end
Ошибка, которую я получаю при попытке поиска идентификатора:
Я думаю, что вы хотите:
class ProductsController < ApplicationController
respond_to :json
def index
@products = Product.select(...)
render json: @products
end
end
app/views/products/index.html.erb
?app/views/products/index.jbuilder