我尝试为每个用户制作累积show.html,显示来自4个不同模型的一些数据。那些表格:
问题是我不知道如何从每个Button的网站表调用数据。显示按钮'数据没有问题。 html的那部分应该是这样的:
<% if @profile.buttons.any? %>
<ul>
<% @buttons.each do |button| %>
<li>
<%= button.website.name %>
<%= link_to button.user_website_url, button.user_website_url %>
</li>
<% end %>
</ul>
<% else %>
<p>None websites added. Please finish your profile creation.</p>
<% end %>
型号:
class Website < ActiveRecord::Base
has_many :buttons
mount_uploader :logo, LogoUploader
validates :name, presence: true, length: { maximum: 50 }
validates :logo, presence: true
end
class Button < ActiveRecord::Base
belongs_to :profile
belongs_to :website
accepts_nested_attributes_for :website
validates :description, length: { maximum: 140 }
validates :user_website_url, presence: true, length: { maximum: 200 }
end
class Profile < ActiveRecord::Base
belongs_to :user
has_many :buttons, :dependent => :destroy
#...
end
用户控制器:
def show
@user = User.find(params[:id])
@profile = @user.profile
@buttons = @profile.buttons
end
在这种情况下,我收到了错误:
未定义的方法`name&#39;为零:NilClass
那么,这有什么问题?我尝试了很多种关联,我得到了上面提到的错误,或者没有ID传递给每个网站(错误的查询)(我也不知道如何处理) )。
答案 0 :(得分:0)
这可能是因为没有关联网站的按钮。见行:
<%= button.website.name %>
如果其中一个按钮的website_id
为nil
,则在nil值上调用方法name
会产生您看到的错误。
答案 1 :(得分:0)
以下代码有问题,button.website
返回nil,而nil没有方法name
:
<%= button.website.name %>
要修复它,只需使用try:
<%= button.try(:website).try(:name) %>
答案 2 :(得分:0)
此行引发错误<%= button.website.name %>
.name
没有获得任何价值,因为按钮没有任何关联的网站,这就是为什么它会将nil:NilClass
作为错误返回。