【问题标题】:rails 3 rendering error div_for?rails 3 渲染错误 div_for?
【发布时间】:2012-05-15 21:33:10
【问题描述】:

我正在开发一个 on rails 3 项目,并尝试在用户个人资料页面上呈现部分内容。渲染对除照片之外的所有内容都适用。当我尝试访问用户个人资料页面时,出现以下错误

undefined methodmodel_name' 代表 NilClass:Class`

用户 show.html.erb

def show
  @user= User.find(params[:id])
  @photo = Photo.find_by_id(params[:id])
end

在配置文件 show.html.erb

<%= content_tag :h2, "My photos" %>
<% photo = @user.photos %>
<% if photo.blank? %>
  <%= link_to 'Create photo', new_photo_path %>
<% else %>
  <%= render :partial => 'photos/photo', :locals => {:photo => @photo} %>
<% end %>

这是它正在渲染的部分

<%= div_for photo do %>
 <table>
   <tr>
     <th>Title</th>
     <th>Date</th>
     <th>Extra</th>
   </tr>

   <tr>
     <td><%= photo.title %></td>
     <td><%= photo.date %></td>
     <td><%= photo.extra %></td>
     <td><%= link_to 'View photos', photo %></td>
   </tr>
 </table>
<% end %>

关于如何摆脱此错误的任何想法或建议?提前致谢

【问题讨论】:

  • 我认为photo变量的单复数形式以及它们的实例和本地类型有点混乱。很难理解,你真正想做什么。但我可以说,最有可能出错的原因是&lt;%= div_for photo do %&gt; 中的 nil photo 变量。

标签: ruby-on-rails ruby ruby-on-rails-3


【解决方案1】:

抛出错误是因为在:locals =&gt; {:photo =&gt; @photo}@photo 为空

请注意,您发送的是@user.photos 列表,而不是单个图像。

@photo = Photo.find_by_id(params[:id]),您正在通过 id、photo_id 获取照片。我相信你想找到用户的照片

@photos = @user.photos 

#for only one photo, also you need to make sure its not null
@photo = @user.photos.first

【讨论】:

  • 谢谢你,由于某种原因,在检查 rails 控制台时,照片是 nil,但是在将 @user.photos 添加到我的收藏后,部分事情开始起作用了
【解决方案2】:

数据库@photo = Photo.find_by_id(params[:id]) 中没有此id的照片

因此,您将nil 对象发送到部分。如果你想显示所有用户照片,试试这个。

<%= content_tag :h2, "My photos" %>
<% photos = @user.photos %>
  <% if photos.empty? %>
    <%= link_to 'Create photo', new_photo_path %>
  <% else %>
    <% photos.each do |photo| %>
      <%= render :partial => 'photos/photo', :locals => {:photo => photo} %>
    <% end %>
<% end %>

【讨论】:

    【解决方案3】:

    当使用 div_for 时,注释为 nil,所以我会尝试通过迭代代码来访问它,就像我在下面所做的那样。那么照片现在应该可以访问了。

    <% @photos.each do |photo| %>
      <%= div_for photo do %>
        Code here
      <% end %>
    <% end %>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-23
      • 2012-10-16
      相关资源
      最近更新 更多