Ruby on rails 3 Rails 3对象为零或不创建

Ruby on rails 3 Rails 3对象为零或不创建,ruby-on-rails-3,Ruby On Rails 3,我正在开发一个rails应用程序,用户可以上传照片。当用户上传他们的照片时,它会出现在他们的个人资料上。一切都很好,除了没有创建照片时,我无法查看用户配置文件页面,因为照片为零 这是我在users\u controller.rb中的显示方法 def show @user = User.find_by_id(:id) @photo = @user.photos.find(params[:id]) end 这是我的show.html.erb <% for photo in @user.p

我正在开发一个rails应用程序,用户可以上传照片。当用户上传他们的照片时,它会出现在他们的个人资料上。一切都很好,除了没有创建照片时,我无法查看用户配置文件页面,因为照片为零

这是我在users\u controller.rb中的显示方法

def show 
@user = User.find_by_id(:id)
@photo = @user.photos.find(params[:id])
end
这是我的show.html.erb

 <% for photo in @user.photos %>
  <%= photo.title %>
  <%= photo.description %>
  <%= image_tag photo.image_url(:thumbnail) %>
  <%= link_to "Show", photo %>
 <br>
 <% end %>



如何绕过此错误?

您可以用以下代码替换
show.html.erb
中的代码:

<% if @user.photos %>
<% for photo in @user.photos %>
  <%= photo.title %>
  <%= photo.description %>
  <%= image_tag photo.image_url(:thumbnail) %>
  <%= link_to "Show", photo %>
  <br>
<% end %>
<% end %>



问题是,当用户没有任何照片时,
@user.photos
返回
nil
,因此您必须首先检查该值。

您操作的代码似乎错误

应该是这样的:

def show 
  @user = User.find(params[:id])
  #@photo = @user.photos.find(params[:id])
end
我故意注释掉了第三行,因为我还不确定你想在那里做什么

@user
变量需要使用
params[:id]
定义,因为这是
userscocontroller
show
操作,所以用户的id将作为
params[:id]
传递

但是你用这个来为用户找到照片,这让我很困惑。。。
Photo
记录的
id
属性可能与
User
记录的
id
属性不同


那么它是什么呢?

用户。通过id(:id)查找。。。错。你想在那里做什么?通过配置文件的用户id查找用户。我是rails noob,这是我的第一个项目。上面的代码与最初发布的代码有什么区别?我添加了一个
if
条件。我通过添加
@photo=@user.photos.find(params[:id])
可以在用户显示页面上显示照片视图。你上面贴的代码就是我改出来的代码。它也像一个符咒一样起作用!:)