2011-12-18 69 views
0

我正在使用Rails应用程序,用户可以上传照片。当用户上传他们的照片时,它会出现在他们的个人资料中。除了当没有创建照片时,一切都很好,然后我无法查看用户配置文件页面,因为照片是零。Rails 3对象为零或不创建

这里是我的节目在users_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 %> 

我如何可以绕过这个错误?

+0

'User.find_by_id(:id)'看上去......错了。你想在那里做什么? – 2011-12-18 04:43:36

+0

通过配置文件的user_id查找用户。我是一个铁轨noob,这是我的第一个项目。 – coletrain 2011-12-18 04:51:53

回答

1

为您的操作的代码似乎是错误的...

它应该是这样的:

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

我注释掉故意第三行,因为我不知道它是什么,你想在那里做,但。使用params[:id]考虑到这是为UsersControllershow动作被定义

@user变量需求,所以对于用户的ID将通过如params[:id]传递。

但后来你去使用它来找到相应的照片的用户,这是混淆了我......在Photo记录的id属性可能不会是一样的User记录的id属性。

那是什么?

+0

我想通过添加'@photo = @ user.photos.find(params [:id])'我可以在用户显示页面上显示照片视图。您上面发布的代码是我更改的代码。它也像魅力一样工作! :) – coletrain 2011-12-18 05:02:14

1

你可以用这个代替代码在你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所以你必须首先检查了点。

+0

上述代码与最初发布的代码有何区别? – coletrain 2011-12-18 04:56:00

+0

我已经添加了一个'if'条件。 – Behrang 2011-12-18 04:57:22