Rails - 从视图中的索引操作访问实例变量属性

Posted

技术标签:

【中文标题】Rails - 从视图中的索引操作访问实例变量属性【英文标题】:Rails - Accessing instance variable properties from an Index Action in a view 【发布时间】:2011-10-05 22:37:18 【问题描述】:

模型

class Account < ActiveRecord::Base
  belongs_to :user
end


class User < ActiveRecord::Base 
  has_one :account  

  devise :database_authenticatable, :registerable,
     :recoverable,  :trackable, :validatable

  attr_accessible :email, :password, :password_confirmation, :remember_me
end

控制器

class AccountsController < ApplicationController

before_filter :authenticate_user!

def index
 @accounts = Account.all

end

查看

p id="notice"><%= notice %></p>

<table>
  <tr>
<th>Account Number</th>
    <th>User Id</th>
    <th>Email Address</th>
    <th></th>
<th></th>
<th></th>
   </tr>
 <% @accounts.each do |account| %>
  </tr>  
   <td><%= account.Number %></td>
  <td><%= account.user_id %></td>
  <td><%= account.user.email %></td>
      <td><%= link_to 'Show', account %></td>
      <td><%= link_to 'Edit', edit_account_path(account) %></td>
  <td><%= link_to 'Destroy', account, :confirm => 'Are you sure?', :method =>                                :delete %></td>
     </tr>
     <% end %>
  </table>
  <br />
  <%= link_to 'New Account', new_account_path %>

我可以通过其他操作访问 account.user.email,但我很困惑为什么我不能在这里访问它,而是获得未定义的方法'email for nil:NilClass? 更新:我需要检查 nil 值。通过在我的视图中添加以下内容来修复它:

<%= account.user.email if account.user %>

【问题讨论】:

【参考方案1】:

用户对象为空,可能帐户记录中缺少键?我会抛出一个异常,提供 Account PKEY 并快速浏览数据库,以确保实际上有一个 User 密钥被限制在它上面。

希望对调试有所帮助。

【讨论】:

以上是关于Rails - 从视图中的索引操作访问实例变量属性的主要内容,如果未能解决你的问题,请参考以下文章

Ajax 和 Rails 4:创建实例变量并更新视图而不刷新

无法使用 Rails 上的自定义布局访问视图上的实例变量

iOS 开发:成员变量(属性,实例变量)的相关知识

如何从 Ruby on Rails 中的字符串值创建变量名?

(Rails)从不同视图中的控制器访问方法

Rails:在 CoffeeScript 或 JavaScript 资产文件中访问控制器实例变量