Rails的控制器使用其他数据库的破坏方式(更新,创建不是工作压力太大,只显示) [英] Rails controller use other db for destroy method (update, create not working too, only show)
问题描述
我有这样的模式:
类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屋!