GET请求错误(带有Angular的Ruby on Rails)

时间:2016-07-14 00:32:57

标签: ruby-on-rails angularjs ruby

我是网络开发的新手,也许这是一个愚蠢的错误,但我找不到适当的文档。

我正在开发一个带有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时出错: The error I get when try to search an id

1 个答案:

答案 0 :(得分:0)

我认为你想要的是:

class ProductsController < ApplicationController
  respond_to :json

  def index
    @products = Product.select(...)
    render json: @products
  end

end