【发布时间】:2016-07-03 18:48:46
【问题描述】:
我正在制作一个注册表格,我有一个名为 ManagedCompany 的类,它有一个名为 Company 的类 Company 的属性。类 Company 具有来自另一个名为 Address 的类的属性。所以,这些类中有作文。
类如下所示:
app/models/managed_company.rb
class ManagedCompany
include ActiveModel::Model
def initialize
@company = Company.new
end
attr_accessor :name, :string
attr_accessor :company, :Company
end
app/models/company.rb
class Company
include ActiveModel::Model
def initialize
@address = Address.new
end
attr_accessor :category, :string
attr_accessor :name, :string
attr_accessor :address, :Address
validates_presence_of :category
validates_presence_of :name
end
app/models/address.rb
class Address
include ActiveModel::Model
attr_accessor :street, :string
attr_accessor :number, :string
validates_presence_of :street
validates_presence_of :number
end
我的表格:
<%= simple_form_for @managed_company do |form| %>
<%= form.input :company.address.street, autofocus: true %>
<% end %>
但是这种方法行不通。错误信息:
undefined method `address' for :company:Symbol
那么,在表单(ruby on rails 的simple_form)中,如何从地址对象访问属性街道?
编辑:添加控制器代码
app/controllers/managed_companies_controller.rb
class ManagedCompaniesController < ApplicationController
def new
@managed_companies = ManagedCompanies.new
end
def create
@managed_companies = ManagedCompanies.new(secure_params)
if @managed_companies.valid?
else
render :new
end
end
private
def secure_params
params.require(:managed_companies).permit(:name)
end
end
app/controllers/companies_controller.rb
class CompaniesController < ApplicationController
def new
@company = Company.new
end
def create
@company = Company.new(secure_params)
if @company.valid?
else
render :new
end
end
private
def secure_params
params.require(:company).permit(:name)
end
end
app/controllers/addresses_controller.rb
class AddressesController < ApplicationController
def new
@address = Address.new
end
def create
@address = Address.new(secure_params)
if @address.valid?
else
render :new
end
end
private
def secure_params
params.require(:address).permit(:street)
end
end
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-3 oop