如何在我的视图中填充 "attr_accessor"?

How do I populate an "attr_accessor" in my view?

我正在使用 Rails 5. 我有这个型号,带有以下“attr_accessor” …

class Scenario < ApplicationRecord
  belongs_to :grading_rubric, optional: true
  has_many :confidential_memo
  has_many :scenario_roles, :dependent => :destroy
  has_many :roles, :through => :scenario_roles

  attr_accessor :roles_str

  validates_presence_of :title
  validates_presence_of :abstract

  def roles_str
    str = ""
    roles.each do |role|
      str = str.empty? ? "role.name\n" : "#{str}#{role.name}"
    end
    str
  end   
end

在我看来,我想在我的“roles_str”文本区域中显示上述“roles_str”方法的输出。我有这个设置

<%= form_for @scenario, :url => url_for(:controller => 'scenarios', :action => 'create') do |f| %>
…
    <%= f.text_area(:roles_str, cols: 40, rows: 20, :validate => true) %>

但是当我编辑我的对象时,这个字段没有被填充。如何使用模型的“role_str”方法的指定输出填充它?

空白文本区域可能是因为您的 roles_str 不是数据库中的属性,而是一个简单的访问器。要填充文本区域,请手动提供值,正如@MarsAtomic 在其现已删除的答案中所建议的那样。

<%= f.text_area(:roles_str, value: @scenario.roles_str, cols: 40, rows: 20, validate: true) %>

问题是,当表单被回发时,你打算做什么?它不会自动保存(因为 table 中没有匹配的列)。但是,我想,这超出了这个问题的范围。 :)