Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在Rails上的Scaffold中检索模型数据?_Ruby On Rails_Ruby_Scaffolding - Fatal编程技术网

Ruby on rails 如何在Rails上的Scaffold中检索模型数据?

Ruby on rails 如何在Rails上的Scaffold中检索模型数据?,ruby-on-rails,ruby,scaffolding,Ruby On Rails,Ruby,Scaffolding,已经一个星期了,我被困在同一个问题上,找不到适合我问题的解决方案。我生成了一个名为Contracts的脚手架(原因:string,paf:string…)。然后我使用rails g模型生成了不同的表。。。例如地址、个人、个人和其他模型。。。所有这些表都引用了合同脚手架。实际上,我可以使用(City是地址模型中的字符串)在我的_form.html.erb中呈现这些字段。好的,一切都正常。但是,当我转到show.html.erb并执行时,我得到了命名方法错误“Undefined method add

已经一个星期了,我被困在同一个问题上,找不到适合我问题的解决方案。我生成了一个名为Contracts的脚手架(原因:string,paf:string…)。然后我使用rails g模型生成了不同的表。。。例如地址、个人、个人和其他模型。。。所有这些表都引用了合同脚手架。实际上,我可以使用
(City是地址模型中的字符串)在我的_form.html.erb中呈现这些字段。好的,一切都正常。但是,当我转到show.html.erb并执行
时,我得到了命名方法错误“Undefined method address”,然后我尝试了
,得到了命名方法错误“Undefined method city for nil:NilClass”,我想这是控制器上的问题,但我试图添加到控制器上

def new@contract=contract.new@address=address.new end

我在节目控制器上也做了同样的事

def show@contract.find(params[id])@address.find(params[id]end

(我不确定语法是否正确,因为我做了一次git重置,我记不清了,这里的目的只是向大家展示我的尝试。我知道这是错误的) 但并没有成功。我看到人们为多张桌子生成各种各样的脚手架,但rails社区说这不是一个好的做法

或者可能有一种简单的方法来生成与我的脚手架相关的不同表

我做了同样的项目,所有数据都放在同一个表中,但我的老板要求放在不同的表中

  create_table "addresses", force: :cascade do |t|
t.string "estado"
t.string "cidade"
t.string "bairro"
t.string "endereco"
t.string "cep"
t.bigint "contrato_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["contrato_id"], name: "index_addresses_on_contrato_id"

  create_table "contatos", force: :cascade do |t|
t.string "email"
t.string "phone"
t.bigint "contrato_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["contrato_id"], name: "index_contatos_on_contrato_id"


  create_table "contratos", force: :cascade do |t|
t.string "razao"
t.string "cpnj"
t.string "insc_estadual"
t.string "insc_municipal"
t.string "paf"
t.string "empresa"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false

  add_foreign_key "addresses", "contratos"
  add_foreign_key "contatos", "contratos"
  add_foreign_key "data", "contratos"
  add_foreign_key "responsavels", "contratos"
反模式

class Contrato < ApplicationRecord
   before_save do
    self.paf.gsub!(/[\[\]\"]/, "") if attribute_present?("paf")
   end
end
class contato
您需要在合同模型上定义关联:

class Contrato < ApplicationRecord
   has_one :address
   # etc..

   before_save do
    self.paf.gsub!(/[\[\]\"]/, "") if attribute_present?("paf")
   end
end
class contato
这就是在模型中实际创建方法的原因

检查指南中所有可用的关联:


您尚未在Contrato模型中添加关联。如果您希望从Contrato like
@Contrato.address.city
获取地址,则应添加如下关联

class Contrato < ApplicationRecord
   has_one :address
   before_save do
    self.paf.gsub!(/[\[\]\"]/, "") if attribute_present?("paf")
   end
end
class contato
对于view city,对语法进行一些修改,如
@contrato&.address&.city

还要检查
地址
表中的条目是否包含您正在检查地址是否存在的合同id


但是,我想知道你已经生成了一个脚手架,比如
rails生成脚手架合同字段1字段2…
,那么生成的模式应该是
Contact
而不是contract.

你能发布你的
schema.rb
文件吗?请向你展示
contract
模型。@Saratibetts我添加了部分架构,因为它很大,但是其他的表是完全相同的。@Yakov与模型相关,没有任何内容,那里的代码是我的复选框。实际上是属于Contrato的地址。当我生成模型时,我添加了引用:contratos这会自动添加“属于”\u to“到模型。@GabrielSavian但是
Contrato
应该知道它有地址。@Yakov如果我没记错的话,我以前试过这个。但是我现在试过了,错误仍然存在。”。