簡體   English   中英

OOP中的Ruby on Rails和組合:如何訪問simple_form中的屬性?

[英]Ruby on rails and composition in OOP: How can I access attributes in simple_form?

我正在填寫注冊表格,並且有一個名為ManagedCompany的類,該類具有名為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

那么,如何使用形式(rails上的ruby的simple_form),如何從地址對象訪問屬性street?

編輯:添加控制器代碼

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
 <%= form.input @company.address.street, autofocus: true %>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM