Ruby on rails 管理视图中的NoMethodError

Ruby on rails 管理视图中的NoMethodError,ruby-on-rails,Ruby On Rails,所以我开始在管理员后端工作,我试图显示所有应用程序供管理员查看。我有一个接受嵌套属性的应用程序模型,但我的管理控制器似乎无法访问它们。这是代码,我惊讶地被卡住了。im接收的错误是: undefined method 'postsecondaries' for #<ActiveRecord::Relation::ActiveRecord_Relation_App:0x00000102452128> 还有公共应用程序模型: class App < ActiveRecord::Ba

所以我开始在管理员后端工作,我试图显示所有应用程序供管理员查看。我有一个接受嵌套属性的应用程序模型,但我的管理控制器似乎无法访问它们。这是代码,我惊讶地被卡住了。im接收的错误是:

undefined method 'postsecondaries' for #<ActiveRecord::Relation::ActiveRecord_Relation_App:0x00000102452128>
还有公共应用程序模型:

class App < ActiveRecord::Base
  belongs_to :user
  has_many :postsecondaries, :dependent => :destroy


  accepts_nested_attributes_for :postsecondaries, :allow_destroy => true

end

@apps
App
s的
关系,而不是
App
。因此,它没有关联方法
postsecondaries

大概,您希望迭代
@apps
,对于其中的每个
App
,迭代
postsecondaries
。正如@zeantsoi的回答所示,Rails有一个基于部分的速记,通过在
索引中包含以下内容,可以避免显式的顶级迭代:

<% render @apps %>

然后,您的
app
partial将只包含代码以迭代并显示
Postsecondary
元素(或者使用与
Postsecondary
partial相同的技术)。有关详细信息,请参阅


最后请注意,由于您似乎没有提供有关
应用程序
记录其余部分的任何信息,而只是提供有关
postsecondaries
的信息,您可能希望首先收集所有的
Postsecondary
值,并在显示它们之前消除重复项和/或对它们进行排序。

基本上,您必须遍历每个应用程序,然后遍历Postsecondary以显示信息。。。所以试试这样吧

<h4>Post Secondary Schools of Interest</h4>
<% @apps.each do |app| %>
   <% app.postsecondaries.each do |ps| %>
      Post Secondary Name: <%= ps.postsecondary %><br />
      Address: <%= ps.postsecondary_address %><br />
      City: <%= ps.postsecondary_city %><br />
      Province: <%= ps.postsecondary_province %><br />
      Postal Code: <%= ps.postsecondary_postalcode %><br />
      Country: <%= ps.postsecondary_country %><br />
      Program: <%= ps.postsecondary_program %><br />
      Faculty: <%= ps.postsecondary_faculty %><br />
      Status: <%= ps.postsecondary_status %><br />
   <% end %> 
<% end %>
感兴趣的专上学校
职位辅助名称:
地址:
城市:
省:
邮政编码:
国家:
节目:
教员:
状态:

现在,您正在尝试访问
ActiveRecord::Relation
上的各个属性。相反,您应该遍历关系对象并单独访问对象的属性

尝试在您的关联中深入一层:

<% @apps.each do |app| %>
  <% app.postsecondaries.each do |ps| %>
    Post Secondary Name: <%= ps.postsecondary %><br />    
    <!-- continue iterating through each attribute on `ps` -->
  <% end %>
<% end %> 

职位辅助名称:

那么您将如何解决这个问题呢?所以现在我使用f.postsecondaries.postsecondaries来获取名称。现在它说postsecondary是一个未定义的方法。
postsecondary
是一个
postsecondary
数组,因此它没有
postsecondary
方法。postsecondary是模式中的一个表。很遗憾,学校名称是由用户存储的。实际上,如果它遵循正常的Rails约定,则表名为
postsecondaries
(复数),但在任何情况下,Rails都会保护您不直接使用数据库表名。正如我所说,
postsecondaries
将为您提供一个
Postsecondary
数组,因此它没有
Postsecondary
属性。你需要反复浏览
postsecondaries
。请发布
Postsecondary
模型。@zeantsoi Postsecondary模型只是声明它属于:app这将遍历所有应用程序,然后依次遍历每个应用程序中的所有postsecondaries。
create_table "postsecondaries", force: true do |t|
    t.datetime "created_at"
    t.datetime "updated_at"
    t.integer  "app_id"
    t.string   "postsecondary"
    t.string   "postsecondary_address"
    t.string   "postsecondary_city"
    t.string   "postsecondary_province"
    t.string   "postsecondary_postalcode"
    t.string   "postsecondary_country"
    t.string   "postsecondary_program"
    t.string   "postsecondary_faculty"
    t.string   "postsecondary_status"
  end
<% render @apps %>
<h4>Post Secondary Schools of Interest</h4>
<% @apps.each do |app| %>
   <% app.postsecondaries.each do |ps| %>
      Post Secondary Name: <%= ps.postsecondary %><br />
      Address: <%= ps.postsecondary_address %><br />
      City: <%= ps.postsecondary_city %><br />
      Province: <%= ps.postsecondary_province %><br />
      Postal Code: <%= ps.postsecondary_postalcode %><br />
      Country: <%= ps.postsecondary_country %><br />
      Program: <%= ps.postsecondary_program %><br />
      Faculty: <%= ps.postsecondary_faculty %><br />
      Status: <%= ps.postsecondary_status %><br />
   <% end %> 
<% end %>
<% @apps.each do |app| %>
  <% app.postsecondaries.each do |ps| %>
    Post Secondary Name: <%= ps.postsecondary %><br />    
    <!-- continue iterating through each attribute on `ps` -->
  <% end %>
<% end %>