我是网络开发的新手,也许这是一个愚蠢的错误,但我找不到适当的文档。
我正在开发一个带有RoR和angular 的项目:autoparts的在线目录,用户可以通过提供某些信息(品牌,型号,年份等)来过滤产品。
我已经将公司数据库连接到RoR,拥有模型和控制器(对数据库有“选择”查询)并可以从rails控制台进行咨询。我有一个角度工厂和一个连接到ruby控制器的控制器,我可以在角度视图中打印数据库的信息。
问题是,当我尝试通过参数进行特定搜索时,我得到GET 500内部服务器错误。
自从我开始学习以来,也许我做错了什么。 从技术上讲,我要做的是更新视图以根据用户提供的控制器参数显示信息。我将留下一些截图供主要理解。
我的Angular模块带有工厂和控制器
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
尝试搜索ID时出错:
答案 0 :(得分:0)
我认为你想要的是:
class ProductsController < ApplicationController
respond_to :json
def index
@products = Product.select(...)
render json: @products
end
end