我正在尝试使用Rails 4制作应用程序。
我有一个项目模型和项目邀请模型。
Projects has many project invitations
Project invitations belong to projects
在我的项目展示中,我试图计算已发送了多少个邀请以及已接受了多少个邀请。
第一部分工作正常。对于接受,我在project_invitation表中有一个名为:student_accepted的属性。如果这是真的,我想计算记录。
<%= @project.project_invitations.size %>
<% if @project.project_invitations.student_accepted == true %>
<%= @project.project_invitations.size %>
<% else %>
'No'
<% end %>
它给出了这个错误:
undefined method `student_accepted' for #<ActiveRecord::Associations::CollectionProxy []>
我也尝试过:
<% if project.project_invitations.student_accepted == true %>
<%= project.project_invitations.size %>
它给出了这个错误:
undefined local variable or method `project' for #<#<Class:0x007fc01d9dcbe8>:0x007fc01de04248>
我很难理解如何通过相关模型引用属性。我读过几本书,但都是背景知识。我已经对相关问题提供了有用的意见(下文),但仍然没有掌握这个概念。
http://stackoverflow.com/questions/32916133/rails-how-to-show-attribute-of-an-associated-model
http://stackoverflow.com/questions/32898541/rails-how-to-show-attributes-from-a-parent-object
谁能看到我做错了什么?
答案 0 :(得分:2)
您可以找到学生已接受的邀请数量:
@project.project_invitations.where(student_accepted: true).count
Rails的Active Record Query Interface guide解释了它是如何运作的。
您收到undefined method 'student_accepted' for #<ActiveRecord::Associations::CollectionProxy []>
错误的原因是因为您在student_accepted
上调用了ActiveRecord::Associations::CollectionProxy
,这是一个用于定义记录集合的对象rails。
如果你想迭代那个集合,你可以这样做:
<% @project.project_invitations.each do |invitation| %>
# here you can call `invitation.student_accepted`
<% end %>
这是必要的,因为项目有很多邀请。
答案 1 :(得分:1)
1) remove Microsoft.Mshtml.dll reference from your project.
2) Use ADD REFERENCE and choose BROWSE.
3) Point to "C:\Program Files (x86)\Microsoft.NET\Primary Interop Assemblies" (it depends of x32/x64 systems) and select directly the microsoft.mshtml.dll file.
4) Set the COPY LOCAL = TRUE too.
为您提供了一个数组,而Array类没有方法@project.project_invitations
(而数组中的每个项都有此方法)。
您可以使用student_accepted
作为条件。