Rails的控制器使用其他数据库的破坏方式(更新,创建不是工作压力太大,只显示) [英] Rails controller use other db for destroy method (update, create not working too, only show)

查看:159
本文介绍了Rails的控制器使用其他数据库的破坏方式(更新,创建不是工作压力太大,只显示)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这样的模式:

 类ToType<的ActiveRecord :: Base的
  attr_accessible:姓名,:TYP_CCM,:TYP_CCM_TAX,:TYP_CDS_ID,:TYP_CTM,:TYP_CYLINDERS,:TYP_DOORS,:TYP_HP_FROM,:TYP_HP_UPTO,:TYP_ID,:TYP_KV_ABS_DES_ID,:TYP_KV_ASR_DES_ID,:TYP_KV_AXLE_DES_ID,:TYP_KV_BODY_DES_ID,:TYP_KV_BRAKE_SYST_DES_ID,:TYP_KV_BRAKE_TYPE_DES_ID,: TYP_KV_CATALYST_DES_ID,:TYP_KV_DRIVE_DES_ID,:TYP_KV_ENGINE_DES_ID,:TYP_KV_FUEL_DES_ID,:TYP_KV_FUEL_SUPPLY_DES_ID,:TYP_KV_MODEL_DES_ID,:TYP_KV_STEERING_DES_ID,:TYP_KV_STEERING_SIDE_DES_ID,:TYP_KV_TRANS_DES_ID,:TYP_KV_VOLTAGE_DES_ID,:TYP_KW_FROM,:TYP_KW_UPTO,:TYP_LA_CTM,:TYP_LITRES,:TYP_MAX_WEIGHT,:TYP_MMT_CDS_ID,:TYP_MOD_ID, :TYP_PCON_END,:TYP_PCON_START,:TYP_RT_EXISTS,:TYP_SORT,:TYP_TANK,:TYP_VALVES,:is_in_to
  set_primary_key:TYP_ID
  belongs_to的:to_model
  的has_many:to_articles,:依赖=> :破坏
结束

类ToArticle<的ActiveRecord :: Base的
  attr_accessible:细节:制造商:名称,:oem_number,:only_with_vin,:数量:TYPE_ID
  belongs_to的:to_type
结束
 

(有些DB是大的目录转换,所以Rails的惯例是有点错过)

to_type我的节目的看法是:

它的一部分:

 %TD
            =的link_toПодробнее,admin_catalog_to_to_article_path(C):类=>BTN BTN小学
            =的link_toРедактирование,edit_admin_catalog_to_to_type_path(C):类=>BTN BTN-警告
            =的link_toУдалить,admin_catalog_to_to_type_path(C):确认=> !!!Тип#{c.Name}будетудалён!!!!Выуверены?:方法=> :删除:类=> BTN BTN-危险
 

我的表演动作正常工作,同时控制器:

 类管理::目录::到:: ToTypesController<的ApplicationController
  respond_to代码:HTML

  的before_filter:AUTH_USER

  高清AUTH_USER
    redirect_to时new_admin_session_path除非admin_signed_in?
  结束

  高清节目
    @mod_id = PARAMS [:ID]
    @man = ToType.find(:全部条件:{:TYP_MOD_ID => @mod_id},顺序为:姓名ASC)
    渲染:布局=> 管理员
  结束

  高清编辑
    @man = ToType.find(PARAMS [:ID])
    渲染:布局=> 管理员
  结束

  DEF更新
    @man = ToType.find(PARAMS [:ID])
    如果@ man.update_attributes(PARAMS [:to_type])
      redirect_to时admin_catalog_to_to_type_path(@ man.TYP_MOD_ID)
    其他
      渲染:布局=> 管理员
    结束
  结束

  高清新
    @man = ToType.new
    @mod_id = PARAMS [:mod_id]
    渲染:布局=> 管理员
  结束

  DEF创建
    @man = ToType.new(PARAMS [:to_type])
    @mod_id = PARAMS [:mod_id]
    @ man.TYP_MOD_ID = @mod_id
    如果@ man.save
      redirect_to时admin_catalog_to_to_type_path(@mod_id)
    其他
      渲染:布局=> 管理员
    结束
  结束

  DEF破坏
    @man = ToType.find(PARAMS [:ID])
    如果@ man.destroy
      redirect_to时admin_catalog_to_to_type_path(@ man.TYP_MOD_ID)
    其他
      渲染:布局=> 管理员
    结束
  结束
结束
 

和路线:

 命名空间:管理办
  命名空间:目录做
      命名空间:做
        资源:to_manufacturers,
                  :to_models,
                  :to_types,
                  :to_articles
      结束
    结束

  结束
 

但是当我尝试调用destroy方法获取:

 的ActiveRecord :: StatementInvalid在管理::目录::到:: ToTypesController#销毁

Mysql2 ::错误:未知列'where子句''to_articles.to_type_id':SELECT`to_articles` * FROM`to_articles` WHERE`to_articles`.`to_type_id` = 26923
 

还当我尝试编辑或创建我得到:

 未定义的方法`MODEL_NAME为NilClass:类
 

我觉得这事是坏与模型连接:与更新,并创建未初始化的对象。 随着摧毁它使用其他!分贝。发生了什么?

此外,我尝试重新创建这一切,并重新命名,没有什么......可以理解错了...还当模型我写要使用的数据库表显示的内容同样的错误。

当我尝试通过控制台添加新的对象,一切正常。

UPD:

 类CreateToTypes< ActiveRecord的::迁移
  高清变化
    CREATE_TABLE:to_types,:primary_key => :TYP_ID做| T |
      t.integer:TYP_ID
      t.integer:TYP_CDS_ID
      t.integer:TYP_MMT_CDS_ID
      t.integer:TYP_MOD_ID
      t.binary:TYP_CTM
      t.binary:TYP_LA_CTM
      t.integer:TYP_SORT
      t.integer:TYP_PCON_START
      t.integer:TYP_PCON_END
      t.integer:TYP_KW_FROM
      t.integer:TYP_KW_UPTO
      t.integer:TYP_HP_FROM
      t.integer:TYP_HP_UPTO
      t.integer:TYP_CCM
      t.integer:TYP_CYLINDERS
      t.integer:TYP_DOORS
      t.integer:TYP_TANK
      t.integer:TYP_KV_VOLTAGE_DES_ID
      t.integer:TYP_KV_ABS_DES_ID
      t.integer:TYP_KV_ASR_DES_ID
      t.integer:TYP_KV_ENGINE_DES_ID
      t.integer:TYP_KV_BRAKE_TYPE_DES_ID
      t.integer:TYP_KV_BRAKE_SYST_DES_ID
      t.integer:TYP_KV_FUEL_DES_ID
      t.integer:TYP_KV_CATALYST_DES_ID
      t.integer:TYP_KV_BODY_DES_ID
      t.integer:TYP_KV_STEERING_DES_ID
      t.integer:TYP_KV_STEERING_SIDE_DES_ID
      t.float:TYP_MAX_WEIGHT
      t.integer:TYP_KV_MODEL_DES_ID
      t.integer:TYP_KV_AXLE_DES_ID
      t.integer:TYP_CCM_TAX
      t.float:TYP_LITRES
      t.integer:TYP_KV_DRIVE_DES_ID
      t.integer:TYP_KV_TRANS_DES_ID
      t.integer:TYP_KV_FUEL_SUPPLY_DES_ID
      t.integer:TYP_VALVES
      t.integer:TYP_RT_EXISTS
      t.string:名称
      t.boolean:is_in_to
      t.string:fuel_type
    结束
  结束
结束


类CreateToArticles< ActiveRecord的::迁移
  高清变化
    CREATE_TABLE:to_articles办| T |
      t.string:oem_number
      t.string:制造商
      t.text:名称
      t.integer:数量
      t.text:细节
      t.boolean:only_with_vin
    结束
  结束
结束
 

解决方案

你没有在 ToArticle 关系和 ToType 数据库。 使用 belongs_to的 ToArticle 迁移

检查轨道上的关联指南

i have such model:

class ToType < ActiveRecord::Base
  attr_accessible :Name, :TYP_CCM, :TYP_CCM_TAX, :TYP_CDS_ID, :TYP_CTM, :TYP_CYLINDERS, :TYP_DOORS, :TYP_HP_FROM, :TYP_HP_UPTO, :TYP_ID, :TYP_KV_ABS_DES_ID, :TYP_KV_ASR_DES_ID, :TYP_KV_AXLE_DES_ID, :TYP_KV_BODY_DES_ID, :TYP_KV_BRAKE_SYST_DES_ID, :TYP_KV_BRAKE_TYPE_DES_ID, :TYP_KV_CATALYST_DES_ID, :TYP_KV_DRIVE_DES_ID, :TYP_KV_ENGINE_DES_ID, :TYP_KV_FUEL_DES_ID, :TYP_KV_FUEL_SUPPLY_DES_ID, :TYP_KV_MODEL_DES_ID, :TYP_KV_STEERING_DES_ID, :TYP_KV_STEERING_SIDE_DES_ID, :TYP_KV_TRANS_DES_ID, :TYP_KV_VOLTAGE_DES_ID, :TYP_KW_FROM, :TYP_KW_UPTO, :TYP_LA_CTM, :TYP_LITRES, :TYP_MAX_WEIGHT, :TYP_MMT_CDS_ID, :TYP_MOD_ID, :TYP_PCON_END, :TYP_PCON_START, :TYP_RT_EXISTS, :TYP_SORT, :TYP_TANK, :TYP_VALVES, :is_in_to
  set_primary_key :TYP_ID
  belongs_to :to_model
  has_many :to_articles, :dependent => :destroy
end

class ToArticle < ActiveRecord::Base
  attr_accessible :details, :manufacturer, :name, :oem_number, :only_with_vin, :quantity, :type_id
  belongs_to :to_type
end

(some db is converted from big catalog, so rails conventions are a little bit missed)

my show view of to_type is:

part of it:

 %td
            = link_to "Подробнее", admin_catalog_to_to_article_path(c), :class=>'btn btn-primary'
            = link_to "Редактирование", edit_admin_catalog_to_to_type_path(c), :class=>'btn btn-warning'
            = link_to "Удалить", admin_catalog_to_to_type_path(c), :confirm => "!!!Тип #{c.Name} будет удалён!!!! Вы уверены?", :method => :delete, :class => "btn btn-danger"

my show action work normally, also controller:

class Admin::Catalog::To::ToTypesController < ApplicationController
  respond_to :html

  before_filter :auth_user

  def auth_user
    redirect_to new_admin_session_path unless admin_signed_in?
  end

  def show
    @mod_id = params[:id]
    @man = ToType.find(:all, conditions: {:TYP_MOD_ID => @mod_id}, order: "Name ASC")
    render :layout => 'admin'
  end

  def edit
    @man = ToType.find(params[:id])
    render :layout => 'admin'
  end

  def update
    @man = ToType.find(params[:id])
    if @man.update_attributes(params[:to_type])
      redirect_to admin_catalog_to_to_type_path(@man.TYP_MOD_ID)
    else
      render :layout => 'admin'
    end
  end

  def new
    @man = ToType.new
    @mod_id = params[:mod_id]
    render :layout => 'admin'
  end

  def create
    @man = ToType.new(params[:to_type])
    @mod_id = params[:mod_id]
    @man.TYP_MOD_ID = @mod_id
    if @man.save
      redirect_to admin_catalog_to_to_type_path(@mod_id)
    else
      render :layout => 'admin'
    end
  end

  def destroy
    @man = ToType.find(params[:id])
    if @man.destroy
      redirect_to admin_catalog_to_to_type_path(@man.TYP_MOD_ID)
    else
      render :layout => 'admin'
    end
  end
end

and route:

namespace :admin do
  namespace :catalog do
      namespace :to do
        resources :to_manufacturers, 
                  :to_models, 
                  :to_types, 
                  :to_articles
      end
    end

  end

but when i try to call destroy method i get:

ActiveRecord::StatementInvalid in Admin::Catalog::To::ToTypesController#destroy

Mysql2::Error: Unknown column 'to_articles.to_type_id' in 'where clause': SELECT `to_articles`.* FROM `to_articles`  WHERE `to_articles`.`to_type_id` = 26923

also when i try edit or create i get:

undefined method `model_name' for NilClass:Class

i think that something is bad with connection with model: with update and create it didn't initialize object. With destroy it use other! db. What happens?

Also i try to recreate it all and rename, nothing... Could understand what wrong... Also when in model i write which db table to use same errors appear.

when i try to add new object via console all is ok.

upd:

class CreateToTypes < ActiveRecord::Migration
  def change
    create_table :to_types, :primary_key => :TYP_ID do |t|
      t.integer :TYP_ID
      t.integer :TYP_CDS_ID
      t.integer :TYP_MMT_CDS_ID
      t.integer :TYP_MOD_ID
      t.binary :TYP_CTM
      t.binary :TYP_LA_CTM
      t.integer :TYP_SORT
      t.integer :TYP_PCON_START
      t.integer :TYP_PCON_END
      t.integer :TYP_KW_FROM
      t.integer :TYP_KW_UPTO
      t.integer :TYP_HP_FROM
      t.integer :TYP_HP_UPTO
      t.integer :TYP_CCM
      t.integer :TYP_CYLINDERS
      t.integer :TYP_DOORS
      t.integer :TYP_TANK
      t.integer :TYP_KV_VOLTAGE_DES_ID
      t.integer :TYP_KV_ABS_DES_ID
      t.integer :TYP_KV_ASR_DES_ID
      t.integer :TYP_KV_ENGINE_DES_ID
      t.integer :TYP_KV_BRAKE_TYPE_DES_ID
      t.integer :TYP_KV_BRAKE_SYST_DES_ID
      t.integer :TYP_KV_FUEL_DES_ID
      t.integer :TYP_KV_CATALYST_DES_ID
      t.integer :TYP_KV_BODY_DES_ID
      t.integer :TYP_KV_STEERING_DES_ID
      t.integer :TYP_KV_STEERING_SIDE_DES_ID
      t.float :TYP_MAX_WEIGHT
      t.integer :TYP_KV_MODEL_DES_ID
      t.integer :TYP_KV_AXLE_DES_ID
      t.integer :TYP_CCM_TAX
      t.float :TYP_LITRES
      t.integer :TYP_KV_DRIVE_DES_ID
      t.integer :TYP_KV_TRANS_DES_ID
      t.integer :TYP_KV_FUEL_SUPPLY_DES_ID
      t.integer :TYP_VALVES
      t.integer :TYP_RT_EXISTS
      t.string :Name
      t.boolean :is_in_to
      t.string :fuel_type
    end
  end
end


class CreateToArticles < ActiveRecord::Migration
  def change
    create_table :to_articles do |t|
      t.string :oem_number
      t.string :manufacturer
      t.text :name
      t.integer :quantity
      t.text :details
      t.boolean :only_with_vin
    end
  end
end

解决方案

you don't have relationship between ToArticle and ToType in database. use belongs_to in ToArticle migration

check rails guide on associations

这篇关于Rails的控制器使用其他数据库的破坏方式(更新,创建不是工作压力太大,只显示)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆