nil的未定义方法:NilClass链接到配置文件

时间:2014-11-12 16:14:39

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

我正在尝试从当前用户页面链接到其他用户个人资料页面,当我点击某人的名字时,我得到以下错误: undefined method profile_photo'为nil:NilClass`

所以我在演出视图中有这个:

<%- model_class = Account -%>
<div class="page-header">
  <h1><%=t '.title', :default => model_class.model_name.human.titleize %></h1>
</div>

<dl class="dl-horizontal">
  <dd><%= image_tag @account.profile_photo.url %></dd>
   <dt><strong><%= model_class.human_attribute_name(:name) %>:</strong></dt>
  <dd><%= @account.name %></dd>
  <dt><strong><%= model_class.human_attribute_name(:gender) %>:</strong></dt>
  <dd><%= @account.gender %></dd>
  <dt><strong><%= model_class.human_attribute_name(:age) %>:</strong></dt>
  <dd><%= @account.age %></dd>
  <dt><strong><%= model_class.human_attribute_name("Date Of Birth") %>:</strong></dt>
  <dd><%= (@account.year_Of_Birth.to_s) +"/"+(@account.month_Of_Birth.to_s)+"/"+(@account.day_Of_Birth.to_s)  %></dd>
  <dt><strong><%= model_class.human_attribute_name(:country) %>:</strong></dt>
  <dd><%= @account.country %></dd>
  <dt><strong><%= model_class.human_attribute_name(:favorite_Sport) %>:</strong></dt>
  <dd><%= @account.favorite_Sport %></dd>
  <dt><strong><%= model_class.human_attribute_name(:account_id) %>:</strong></dt>

</dl>

这在我的页面视图中:

...

 <% @accounts.each do |account| %>
          <tr>
            <td><%= link_to account.name, account %></td>

...

这是在我的控制器上: ...

def show
    @account = Account.find(params[:id])
  end

...

感谢。

2 个答案:

答案 0 :(得分:1)

问题与link_to标记有关,在此标记中,第二个参数是show action path。 但是你已经通过了对象。 请检查各自控制器和路径的路线。动作

使用命令:rake routes

然后将第二个参数更改为routes_path(account.id)

将路线更改为您需要控制器操作的路径

有关详情,请查看:http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to

答案 1 :(得分:0)

您可能需要检查以确保您在config/routes.rb中为帐户设置的唯一路线是:

resources :accounts

您的错误消息表明您在profile_photo上呼叫account,但accountnil值,而不是可以接收方法呼叫的对象。< / p>

确保您的accounts_controller.rb文件包含以下操作(即方法):

class AccountsController < ActionController::Base
  def index
    @accounts = Account.all
  end

  def show
    @account = Account.find(params[:id])
  end
end