如何使用rails中的关联从不同的表中获取值?

时间:2014-09-27 07:45:34

标签: ruby-on-rails ruby-on-rails-3 postgresql postgresql-9.1

我在Postgres数据库结构中有两个表,如下所示:

CREATE TABLE tables(
 id serial NOT NULL,
 name character varying(255),
 table_state_id integer,
 table_type integer,
 CONSTRAINT tables_pkey PRIMARY KEY (id)
)

CREATE TABLE table_states
(
 id serial NOT NULL,
 name character varying(255),
 CONSTRAINT table_states_pkey PRIMARY KEY (id)
)

表型号:

class Table < ActiveRecord::Base
 attr_accessible :name, :table_type, :table_state_id, 
 belongs_to :table_state
end

TableState Model:

class TableState < ActiveRecord::Base
 attr_accessible :name, :color_code
 has_many :tables
end

在视图中,我正在那样访问:

= debug @table_data.table_state.name      # Where `@table_data` is a variable from `tables` table 

通过关联,我想访问name表的table_states列,该表的ID存在于table_state_id表的tables列中。我该怎么办?

1 个答案:

答案 0 :(得分:0)

您的代码中包含所有内容。您的table_state_id表格中tables必须保存为零。

错误表示您的table_state关联对象为零。这个@table_data.table_state将返回table_state对象,并将此引用为nil。

尝试在select table_state_id from tables上运行db console并查看结果。并通过db console进行必要的记录更改。

将来您还可以使用try来解决此类问题(特别是生产模式)

= debug @table_data.table_state.try(:name)