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