Ruby on rails 3 Rails 3对象为零或不创建
我正在开发一个rails应用程序,用户可以上传照片。当用户上传他们的照片时,它会出现在他们的个人资料上。一切都很好,除了没有创建照片时,我无法查看用户配置文件页面,因为照片为零 这是我在users\u controller.rb中的显示方法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
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])
可以在用户显示页面上显示照片视图。你上面贴的代码就是我改出来的代码。它也像一个符咒一样起作用!:)